Maven command learning.
關鍵字: maven 命令學習筆記一、安裝Maven並設定環境變量
首先到 http://maven.apache.org 去下一個maven最新的安裝包,比如2.0.8,隨便解壓到一個目錄,假設 C:/mvn208。
然後設定環境變量:
SET M2_HOME=%install-dir%
SET MAVEN_HOME=%install-dir%/bin
默認的本地 Repositories-Path 在 %M2_HOME%/conf/settings.xml中,找到<localRepository > 修改之即可。
這步也很重要,如果出現mvn運行時錯誤請檢查此處。
查看Maven版本:
mvn -v | -ver | -verson
二、創建簡單的Maven-project
建個目錄C:/mvnTest,命令行輸入> mvn archetype:create -DgroupId=com.test -DartifactId=mytest
-DgroupId -- 項目組名稱,也可以理解爲默認的包名稱。
-DartifactId -- 項目名稱、工程名,等價於 project-name
這樣就在目錄C:/mvnTest/mytest下生成了一個mvn-project了。
進入該目錄發現有個pom.xml(以下簡稱pom)文件,mvn的全部配置(對於此項目)都在這了。
通常開發需要集成到Eclipse,生成.project,.classpath
在pom-path下輸入:
mvn eclipse:eclipse
三、使用Help插件
在pom-path下嘗試輸入一下命令:
mvn help:active-profiles -- 列出當前構建中活動的 Profile(項目的,用戶的,全局的)。
mvn help:effective-pom -- 顯示當前構建的實際 POM,包含活動的 Profile。
mvn help:effective-settings -- 打印出項目的實際 settings, 包括從全局的 settings 和用戶級別 settings繼承的配置。
mvn help:describe -- 描述插件的屬性。它不需要在項目目錄下運行。但是你必須提供你想要描述插件的 groupId 和 artifactId。
describe加上參數就會像下面這樣:
mvn help:describe -Dcmd=install
mvn help:describe -Dcmd=help:describe
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-help-plugin
mvn help:describe -DgroupId=org.apache.maven.plugins -DartifactId=maven-help-plugin
具體作用,光看名字就一目瞭然了。
四、使用Archetype 插件
創建一個maven項目:
mvn archetype:create -DgroupId=com.sunnysoft -DartifactId=sunnyware -DpackageName=com.sunnysoft.sunnyware
...
-DpackageName -- 指定包名稱(不寫的話就是-DgroupId了)
執行後生成的pom如下:
- < 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.sunnysoft </ groupId >
- < artifactId > sunnyware </ artifactId >
- < packaging > jar </ packaging >
- < version > 1.0-SNAPSHOT </ version >
- < name > sunnyware </ 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 >
項目的目錄:
- 生成的目錄及文件:
- /---sunnyware
- | pom.xml
- |
- /---src
- +---main
- | /---java
- | /---com
- | /---sunnysoft
- | /---sunnyware
- | App.java
- |
- /---test
- /---java
- /---com
- /---sunnysoft
- /---sunnyware
- AppTest.java
運行 mvn install 來初始化項目。
- 構建後的目錄及文件:
- /---sunnyware
- | pom.xml
- |
- +---src
- | +---main
- | | /---java
- | | /---com
- | | /---sunnysoft
- | | /---sunnyware
- | | App.java
- | |
- | /---test
- | /---java
- | /---com
- | /---sunnysoft
- | /---sunnyware
- | AppTest.java
- |
- /---target
- | sunnyware-1.0-SNAPSHOT.jar
- |
- +---classes
- | /---com
- | /---sunnysoft
- | /---sunnyware
- | App.class
- |
- +---surefire-reports
- | com.sunnysoft.sunnyware.AppTest.txt
- | TEST-com.sunnysoft.sunnyware.AppTest.xml
- |
- /---test-classes
- /---com
- /---sunnysoft
- /---sunnyware
- AppTest.class
Look!目錄中多了測試和部署文件!
用 java -cp target/sunnyware-1.0-SNAPSHOT.jar com.sunnysoft.sunnyware.App 來測試App.java 吧!
CONTINUE
當 Maven 經過以 package 爲結尾的默認生命週期的時候,下面的目標按順序被執行:
resources:resources
Resources 插件的 resources 目標綁定到了 resources 階段。這個目標複製 src/main/resources 下的所有資源和其它任何配置的資源目錄,到輸出目錄。
compiler:compile
Compiler 插件的 compile 目標綁定到了 compile 階段。這個目標編譯src/main/java 下的所有源代碼和其他任何配置的資源目錄,到輸出目錄。
resources:testResources
Resources 插件的 testResources 目標綁定到了 test-resources 階段。這個目標複製 src/test/resources 下的所有資源和其它任何的配置的測試資源目錄,到測試輸出目錄。
compiler:testCompile
Compiler 插件的 testCompile 目標綁定到了 test-compile 階段。這個目標編譯 src/test/java 下的測試用例和其它任何的配置的測試資源目錄,到測試輸出目錄。
surefire:test
Surefire 插件的 test 目標綁定到了 test 階段。這個目標運行所有的測試並且創建那些捕捉詳細測試結果的輸出文件。默認情況下,如果有測試失敗,這個目標會終止。
jar:jar
Jar 插件的jar 目標綁定到了 package 階段。這個目標把輸出目錄打包成JAR文件。
Maven exec 插件:
mvn exec:java -Dexec.mainClass=org.sonatype.mavenbook.weather.Main 相當於測試一個有main方法的class文件。(比如 java Main)
Maven dependency 插件:
mvn dependency:analyze
-- 分析項目依賴性
mvn dependency:resolve
-- 顯示項目依賴
mvn dependency:tree
-- 顯示項目依賴的樹形結構
單元測試:
mvn test -- 直接運行Maven單元測試。實際上在 mvn install 或 mvn package 同時也會運行單元測試。test 依賴在pom中的定義像這樣:
- < dependency >
- < groupId > junit </ groupId >
- < artifactId > junit </ artifactId >
- < version > 3.8.1 </ version >
- < scope > test </ scope >
- </ dependency >
如果你打算在構建時忽略掉錯誤的信息,就這樣定義:
- < build >
- < plugins >
- < plugin >
- < groupId > org.apache.maven.plugins </ groupId >
- < artifactId > maven-surefire-plugin </ artifactId >
- < configuration >
- <!-- 此值爲true則忽略測試中的構建錯誤 -->
- < testFailureIgnore > true </ testFailureIgnore >
- <!-- 此值爲true則不執行單元測試 -->
- < skip > true </ skip >
- </ configuration >
- </ plugin >
- </ plugins >
- </ build >
關於此插件可以參考:http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html
命令行的話:
mvn test -Dmaven.test.failure.ignore=true -- 忽略錯誤構建
另外,這行最常用到的:
mvn package -Dmaven.test.skip=true -- 在打包時跳過測試
Maven Assembly (創建分發包) 插件:
pom定義:
- < plugin >
- < artifactId > maven-assembly-plugin </ artifactId >
- < configuration >
- < descriptorRefs >
- <!-- 這樣可以把項目依賴的class或jar文件也一併構建進去 -->
- < descriptorRef > jar-with-dependencies </ descriptorRef >
- </ descriptorRefs >
- </ configuration >
- </ plugin >
創建webapp:
就像創建一個普通的JavaProject一樣簡單:
mvn archetype:create -DgroupId=com.sunnysoft
-DartifactId=sunnywareweb -DpackageName=com.sunnyware
-DarchetypeArtifactId=maven-archetype-webapp
-DarchetypeArtifactId=maven-archetype-webapp 加上即可。
最後,要清理項目時候就用:
mvn clean install -- 清理項目。