Maven学习-构建项目
創建項目
運行如下命令會創建一個簡單的Maven項目。
mvn archetype:create -DgroupId=com.netease.learn -DartifactId=simple -DpackageName=com.netease.learn- -DgroupId:指定了項目的groupId;
- -DartifactId:指定了項目的artifactId
- -DpackageName=org.sonatype.mavenbook會在項目創建包。
在運行這個插件時,前綴是archetype,目標是generate。
構建項目
如果想要構建打包這個應用,在包含pom.xml的目錄下運行mvn install。
運行 mvn install會將項目打包,并發送到本地倉庫。
運行
Java –cp simple-2.1.jar com.netease.learm.App當Maven運行的時候,它是根據項目的pom.xml里設置的組合來運行的,一個最上級的POM定義了Maven的安裝目錄,在這個目錄中全局的默認值被定義了,(可能)還有一些用戶定義的設置。想要看這個“有效的 (effective)”POM,或者說Maven真正運行根據的POM,在simple項目的基礎目錄下運行 mvn help:effective-pom命令。
Maven插件和目標
我們已經用兩種類型的命令行參數運行了Maven:①:單個的插件目標,Archetype插件的Generate目標②:一個生命周期階段 –package。
一個maven插件是一個或者過個目標的集合。一個目標是一個明確的任務,它可以作為單獨的運行目標,或者作為一個大的構建的一部分和其它目標一起運行。一個目標是Maven中的一個工作單元。目標通過配置屬性進行配置,以用來定制行為。目標定義了一些參數,這些參數可以定義一些默認值。
Maven的生命周期
Mavne的生命周期是有一些生命周期階段構成。一個階段是在被Maven稱為“構建生命周期”中的一個步驟。生命周期是包含在一個項目構建中的一系列有序的階段。Maven支持許多不同的生命周期,最常用的生命周期是默認的Maven生命周期,這個生命周期中一開始的一個階段是驗證項目的基本完整性,最后一個階段是把項目發布成產品。
插件目標可以附著在生命周期的階段上。隨著maven沿著生命周期階段移動,它會執行附著在特定階段上的目標。每個階段可能綁定零個或者多個目標。在Maven執行一個階段的時候,它首先會有序的執行前面的所有階段,到命令指定的那個階段位置。
- 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文件。
運行package階段能很好的跟蹤一個特定的構建中包含的所有目標,它也允許每個項目使用Maven來遵循一組定義明確的標準。而這個生命周期能讓開發人員從一個Maven項目跳到另外一個Maven項目,而不用知道太多每個項目構建的細節。如果你能夠構建一個Maven項目,那么你就能構建所有的Maven項目。
Maven坐標
POM為項目命名,提供了項目的一組唯一標識符(坐標),并且通過依賴 (dependencies) ,父 (parents) 和先決條件(prerequisite) 來定義和其它項目的關系。POM也可以自定義插件行為,提供項目相關的社區和開發人員的信息。Maven坐標定義了一組標識,它們可以用來唯一標識一個項目,一個依賴,或者MavenPOM里的一個插件。
Maven install命令會把項目的構建安裝到本地倉庫。
Maven依賴管理
一個復雜的項目將會包含很多依賴,也有可能包含依賴于其它構件的依賴。Maven支持傳遞性依賴,對于傳遞性依賴,只需要加上直接依賴的類庫,Maven會隱式的把這些庫間接依賴的庫也加入到項目中。Maven也會處理這些依賴中的沖突,同時能自定義默認行為,或者排除一些特定的傳遞依賴性。Maven在下載依賴的文件同時會下載POM文件,這是傳遞性依賴的基礎。Maven也提供了不同的依賴范圍。同時當為項目構建JAR文件的時候,它的依賴不會被捆綁在生成的構建中。當用Maven來創建WAR或者EAR,你可以配置Maven讓它在生成的構件中捆綁依賴,你也可以配置Maven,使用provided范圍,讓它排除WAR文件中特定的依賴。provided范圍告訴Maven一個依賴在編譯的時候需要,但是它不應該被捆綁在構建的輸出中。?
其他知識
- 查看項目依賴:mvn dependency:resolve
- 查看整個項目依賴樹:mvn dependency:tree
- 執行測試單元:mvn? test
- 忽略測試失敗:mvn test –Dmaven.test.failure.ignore=true
- 跳過單元測試:mvn install –Dmaven.test.skip=true
Maven Assembly插件是一個可以用來創建應用程序特有分發包的插件,分發包包含了項目的二進制文件和所有依賴。此時需要在pom中添加一下內容:
<build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration></plugin></plugins> </build> View Code添加好配置后,可以運行?mvn install assembly:assembly 來構建這個裝配。
構建多模板項目
一個多模板項目通過一個父POM引用一個或者多個子模板來定義。父項目不創建一個JAR或者WAR,它僅僅是一個引用其他Maven項目的POM,所以其打包類型是pom。在父模板的pom.xml中列出了項目的子模板,這些模塊在modules元素中定義。每個module元素對應一個子模板。Maven知道去這些子目錄尋找pom.xml文件,并且在構建的時候,它會將這些子模板包含到要構建的項目中。在項目中需要使用parent元素標記一個Maven坐標來引用父模板pom。子模板會繼承父模板的groupId和version。父POM如下:
子模板POM如下所示:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"><parent><artifactId>trade</artifactId><groupId>com.netease.nsip</groupId><version>1.0.3-RELEASE</version></parent><modelVersion>4.0.0</modelVersion><artifactId>trade-core</artifactId><version>1.0.3-RELEASE</version><packaging>jar</packaging><dependencies>...</dependencies> </project> View Code?當Maven執行一個帶有子模板的項目的時候,Maven首先載入父POM,然后定位所有的子模塊POM。Maven然后將所有這些項目的POM放入到一個稱為Maven反應堆的東西中,由他負責分析模塊之間的依賴關系。這個反應堆處理組件的排序,以確保相互獨立的模塊能以適當的順序被編譯和安裝。
轉載于:https://www.cnblogs.com/wxgblogs/p/6662107.html
總結
以上是生活随笔為你收集整理的Maven学习-构建项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UIView 动画进阶
- 下一篇: Maven学习-优化和重构POM