運行 cmd
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
這個archetype(模板)是一個插件,generate是目標指令(goal)
插件就是集成了若干個goal的合集
Maven標準的項目結(jié)構(gòu):
src/main/java | 源代碼 |
src/main/resources | 資源文件 |
src/main/filters | 資源過濾 |
src/main/config | 配置文件 |
src/main/scripts | 腳本 |
src/main/webapp | Web程序源代碼 |
src/test/java | 測試的源代碼 |
src/test/resources | 測試的資源 |
src/test/filters | 測試的資源過濾 |
src/it | 集成測試(主要用于插件) |
src/assembly | Assembly descriptors |
src/site | 自動生成的網(wǎng)站 |
生成后在根目錄會有個pom.xml,然后是src和target文件夾:
<PRoject xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> 包名 <artifactId>my-app</artifactId> 項目名,也用于生成的jar包名 <packaging>jar</packaging> 默認為jar,后面詳述 <version>1.0-SNAPSHOT</version> 版本 <name>my-app</name> 用于文檔 <url>http://maven.apache.org</url> 用于文檔 <dependencies> <dependency> 一個外部依賴 <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies></project>
構(gòu)建:
mvn package
這個package是自帶命令,是default構(gòu)建周期的一個步驟
比如運行compile,會自動按以下順序執(zhí)行:
可以測試一下:
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
關(guān)于構(gòu)建周期:有三個是內(nèi)置的,default(默認), clean(清理target文件夾) , site(生成站點文檔)
每個周期都是由不同步驟組成,比如default就包括了:
下面的步驟總是會從頂部開始,按順序執(zhí)行
同一個命令可以同時執(zhí)行多個步驟,如
mvn clean install 會先clean,再install
一個插件的goal代表一個特定的任務(wù),
而某個步驟實際上是調(diào)用某個插件的goal,具體哪個goal跟項目本身有關(guān)
所以,也可以在命令行直接執(zhí)行插件goal,如:
mvn dependency:copy-dependencies
mvn archetype:generate
一個周期步驟可以關(guān)聯(lián)多個插件goal
1.默認關(guān)聯(lián):通過指明pom.xml的packaging,默認為jar
步驟 | 插件goal |
process-resources | resources:resources |
compile | compiler:compile(插件可以有多個goal) |
process-test-resources | resources:testResources |
test-compile | compiler:testCompile(插件可以有多個goal) |
test | surefire:test |
package | jar:jar |
install | install:install |
deploy | deploy:deploy |
2.手動關(guān)聯(lián):通過pom.xml的plugins
插件的goal本身都有個默認關(guān)聯(lián)的步驟,但goal也可能關(guān)聯(lián)到多個步驟,可以具體指定一個
<build> <plugins> <plugin> <groupId>com.mycompany.example</groupId> <artifactId>display-maven-plugin</artifactId> <version>1.0</version> <executions>插件配置 <execution> <phase>process-test-resources</phase>具體步驟 <goals> <goal>time</goal>具體goal </goals> </execution> </executions> </plugin>
</plugins></build>
這個goal將附加到那個步驟的goal的后面執(zhí)行,也可以自己指定順序
更詳細的三個周期步驟,及相關(guān)goal對應表:
Clean Lifecycle
pre-clean | ||
clean | 構(gòu)建的所有東西都被移除 | clean:clean |
post-clean |
Default Lifecycle
validate | ||
initialize | 初始化,比如設(shè)環(huán)境變量,建文件夾 | |
generate-sources | ||
process-sources | ||
generate-resources | ||
process-resources | resources:resources | |
compile | 編譯 | compiler:compile |
process-classes | 編譯后處理 | plugin:descriptor |
generate-test-sources | ||
process-test-sources | resources:testResources | |
generate-test-resources | ||
process-test-resources | ||
test-compile | 測試的編譯 | compiler:testCompile |
process-test-classes | ||
test | surefire:test | |
prepare-package | ||
package | jar:jar and plugin:addPluginArtifactMetadata | |
pre-integration-test | ||
integration-test | ||
post-integration-test | ||
verify | ||
install | install:install | |
deploy | deploy:deploy |
Site Lifecycle
pre-site | ||
site | 生成網(wǎng)站文檔 | site:site |
post-site | ||
site-deploy | site:deploy |
具體可以查看maven-core-3.2.5.jar/META-INF/plexus中的三個xml
新聞熱點
疑難解答