天天看點

Maven(四):Maven常用指令,生命周期及插件常用指令生命周期

常用指令

mvn clean 清理項目

mvn compile 編譯源代碼

mvn test 運作測試

mvn test-compile 編譯測試代碼

mvn package 打包

mvn install 将包上傳到本地倉庫

mvn deploy 上傳私服

生命周期

Maven的生命周期就是為了對所有的建構過程進行抽象統一,包括:項目清理、初始化、編譯、測試、打包、內建測試、驗證、部署、站點生成等幾乎所有的建構步驟。Maven生命周期是抽象的,這些步驟的實際任務都是由插件來完成

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可以通過插件描述中找到。

Maven(四):Maven常用指令,生命周期及插件常用指令生命周期

此外,還能找到bound to phase,是生命周期預設綁定的階段,當自定義綁定中不寫phase,那麼會在goal預設綁定的階段執行該插件目标。

Maven(四):Maven常用指令,生命周期及插件常用指令生命周期

插件倉庫

通過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(四):Maven常用指令,生命周期及插件常用指令生命周期

*

參考: 《Maven實戰》