常用指令
mvn clean 清理項目
mvn compile 編譯源代碼
mvn test 運作測試
mvn test-compile 編譯測試代碼
mvn package 打包
mvn install 将包上傳到本地倉庫
mvn deploy 上傳私服
生命周期
Maven的生命周期就是為了對所有的建構過程進行抽象統一,包括:項目清理、初始化、編譯、測試、打包、內建測試、驗證、部署、站點生成等幾乎所有的建構步驟。Maven生命周期是抽象的,這些步驟的實際任務都是由插件來完成
三套生命周期
Maven擁有三套互相獨立的生命周期:clean(清理項目)、default(建構項目)、site(建立項目站點)。使用者可以江景調用某個生命周期的某個階段,不會對其他生命周期産生影響。Maven生命周期的階段與插件目标互相綁定,以完成具體建構任務。對于插件本身,為了能複用代碼,往往能完成多個任務,每個任務就是一個插件目标。如maven-dependency-plugin有十多個目标,每個目标對應一個功能:dependency:analyze——分析項目依賴,找出潛在無用依賴;dependency:tree——列出項目依賴書,dependency:list——列出項目所有已解析依賴。
内置綁定
為了讓使用者幾乎不用任何配置就能建構Maven項目,Maven在核心為一些主要生命周期階段綁定了插件目标
clean生命周期階段與插件目标的綁定關系
生命周期階段 | 插件目标 | 階段工作 | 執行任務 |
---|---|---|---|
pre-clean | - | 清理錢需要完成的工作 | - |
clean | maven-clean-plugin:clean | 清理上一次建構生成的檔案 | 清理上一次建構生成的檔案 |
post-clean | - | 清理後需要完成的工作 | - |
default生命周期階段與插件目标的綁定關系
生命周期階段 | 插件目标 | 階段目标 | 執行任務 |
---|---|---|---|
validate | - | ||
initialize | - | ||
generate-sources | - | ||
process-sources | - | 處理主資源檔案,對src/main/resources下的内容複制到輸出主classpath目錄中 | |
genrate-resources | - | ||
process-resources | maven-resources-plugin:resources | 複制主資源檔案到主輸出目錄 | |
compile | maven-compiler-plugin:compile | 編譯主源碼,對src/main/java下的檔案輸出主classpat目錄中 | 編譯主代碼到主輸出目錄 |
process-classes | - | ||
generate-test-sources | - | ||
process-test-sources | maven-resources-plugin:testResources | 處理項目測試資源檔案,對對src/test/resources下的内容複制到輸出測試classpath目錄中 | 複制測試資源檔案到測試輸出目錄 |
generate-test-resources | - | ||
process-test-resources | - | ||
test-compile | maven-compiler-plugin:testCompile | 編譯項目測試代碼 | 編譯測試代碼到測試輸出目錄 |
process-test-classes | - | ||
test | maven-surefire-plugin:test | 使用單元測試架構運作測試,測試代碼不會被打包或部署 | 執行測試用例 |
prepare-package | - | ||
package | maven-jar-plugin:jar | 接受編譯好的代碼,打成可釋出的格式(如jar) | 打jar包 |
pre-integraton-test | - | ||
integration-test | - | ||
post-integration-test | - | 将項目輸出安裝到本地倉庫 | |
verify | maven-install-plugin:install | ||
install | - | 将包安裝到本地倉庫 | 将項目輸出部署到遠端倉庫 |
deploy | maven-deploy-plugin:deploy | 将包複制到遠端倉庫 | |
site生命周期階段與插件目标的綁定關系
生命周期階段 | 插件目标 | 階段目标 | 執行任務 |
---|---|---|---|
pre-site | - | 在生成站點之前需要完成的功能做 | |
site | maven-site-plugin:site | 生成站點文檔 | |
post-site | - | 生成站點時候需要完成的工作 | |
site-deploy | maven-site-plugin:deploy | 将站點釋出到伺服器上 |
自定義綁定
處理内置綁定使用者還能自己選擇将某個插件目标綁定到生命周期的某個階段上。executions下每個execution子元素可以用來配置執行一個任務,通過phase綁定生命周期階段,通過goal指定插件目标。當多個插件目标綁定到同一個階段時,目标的執行順序由插件的聲明順序決定。
org.apache.maven.plugins maven-source-plugin 3.0.0 attach-sources verify jar-no-fork
插件配置
指令行配置
Maven指令中使用-D參數,伴随參數鍵=參數值得形式,如mvn install -Dmaven.test.skip=true
POM全局配置
使用configuration元素設定參數值
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
插件查詢
線上
Maven 官方插件
https://maven.apache.org/plugins/index.html
CodeHaus 插件
http://www.mojohaus.org/plugins.html
maven-help-plugin
maven-help-plugin
mvn help:describe -Dplugin=groupId:artifactId:version -D參數,如:
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:3.0.0 -Ddetail -Dgoal=jar-no-fork(其中-Dgoal描述某個插件目标資訊,-Ddetail描述更詳細資訊)
或者簡寫,用goal prefix替代groupId:artifactId,省略version,預設擷取最新版:mvn help:describe -Dplugin=goal prefix -D參數,如:mvn help:describe -Dplugin= source
其中goal prefix可以通過插件描述中找到。
此外,還能找到bound to phase,是生命周期預設綁定的階段,當自定義綁定中不寫phase,那麼會在goal預設綁定的階段執行該插件目标。
插件倉庫
通過pluginRepository元素配置,其餘與repostory一樣,在超級POM中(Maven安裝目錄下lib/maven-model-builder-3.2.5.jar中,解壓縮找到org\apache\maven\model\pom-4.0.0.xml)也有配預設位址——中央倉庫
central Central Repository https://repo.maven.apache.org/maven2 default false never
同時在超級POM中還制定了核心插件的預設版本,當别的插件沒有指定版本時,Maven将取最新的release版本。
*
參考: 《Maven實戰》