Maven学习-构建项目
創(chuàng)建項(xiàng)目
運(yùn)行如下命令會(huì)創(chuàng)建一個(gè)簡(jiǎn)單的Maven項(xiàng)目。
mvn archetype:create -DgroupId=com.netease.learn -DartifactId=simple -DpackageName=com.netease.learn- -DgroupId:指定了項(xiàng)目的groupId;
- -DartifactId:指定了項(xiàng)目的artifactId
- -DpackageName=org.sonatype.mavenbook會(huì)在項(xiàng)目創(chuàng)建包。
在運(yùn)行這個(gè)插件時(shí),前綴是archetype,目標(biāo)是generate。
構(gòu)建項(xiàng)目
如果想要構(gòu)建打包這個(gè)應(yīng)用,在包含pom.xml的目錄下運(yùn)行mvn install。
運(yùn)行 mvn install會(huì)將項(xiàng)目打包,并發(fā)送到本地倉(cāng)庫(kù)。
運(yùn)行
Java –cp simple-2.1.jar com.netease.learm.App當(dāng)Maven運(yùn)行的時(shí)候,它是根據(jù)項(xiàng)目的pom.xml里設(shè)置的組合來(lái)運(yùn)行的,一個(gè)最上級(jí)的POM定義了Maven的安裝目錄,在這個(gè)目錄中全局的默認(rèn)值被定義了,(可能)還有一些用戶定義的設(shè)置。想要看這個(gè)“有效的 (effective)”POM,或者說(shuō)Maven真正運(yùn)行根據(jù)的POM,在simple項(xiàng)目的基礎(chǔ)目錄下運(yùn)行 mvn help:effective-pom命令。
Maven插件和目標(biāo)
我們已經(jīng)用兩種類型的命令行參數(shù)運(yùn)行了Maven:①:單個(gè)的插件目標(biāo),Archetype插件的Generate目標(biāo)②:一個(gè)生命周期階段 –package。
一個(gè)maven插件是一個(gè)或者過(guò)個(gè)目標(biāo)的集合。一個(gè)目標(biāo)是一個(gè)明確的任務(wù),它可以作為單獨(dú)的運(yùn)行目標(biāo),或者作為一個(gè)大的構(gòu)建的一部分和其它目標(biāo)一起運(yùn)行。一個(gè)目標(biāo)是Maven中的一個(gè)工作單元。目標(biāo)通過(guò)配置屬性進(jìn)行配置,以用來(lái)定制行為。目標(biāo)定義了一些參數(shù),這些參數(shù)可以定義一些默認(rèn)值。
Maven的生命周期
Mavne的生命周期是有一些生命周期階段構(gòu)成。一個(gè)階段是在被Maven稱為“構(gòu)建生命周期”中的一個(gè)步驟。生命周期是包含在一個(gè)項(xiàng)目構(gòu)建中的一系列有序的階段。Maven支持許多不同的生命周期,最常用的生命周期是默認(rèn)的Maven生命周期,這個(gè)生命周期中一開始的一個(gè)階段是驗(yàn)證項(xiàng)目的基本完整性,最后一個(gè)階段是把項(xiàng)目發(fā)布成產(chǎn)品。
插件目標(biāo)可以附著在生命周期的階段上。隨著maven沿著生命周期階段移動(dòng),它會(huì)執(zhí)行附著在特定階段上的目標(biāo)。每個(gè)階段可能綁定零個(gè)或者多個(gè)目標(biāo)。在Maven執(zhí)行一個(gè)階段的時(shí)候,它首先會(huì)有序的執(zhí)行前面的所有階段,到命令指定的那個(gè)階段位置。
- resources:resources 。Resources插件的resources目標(biāo)綁定到了resources 階段。這個(gè)目標(biāo)復(fù)制src/main/resources下的所有資源和其它任何配置的資源目錄,到輸出目錄。
- compiler:compile。Compiler插件的compile目標(biāo)綁定到了compile 階段。這個(gè)目標(biāo)編譯src/main/java下的所有源代碼和其他任何配置的資源目錄,到輸出目錄。
- resources:testResources。Resources插件的testResources目標(biāo)綁定到了test-resources 階段。這個(gè)目標(biāo)復(fù)制src/test/resources下的所有資源和其它任何的配置的測(cè)試資源目錄,到測(cè)試輸出目錄。
- compiler:testCompile。Compiler插件的testCompile目標(biāo)綁定到了test-compile 階段。這個(gè)目標(biāo)編譯src/test/java下的測(cè)試用例和其它任何的配置的測(cè)試資源目錄,到測(cè)試輸出目錄。
- surefire:test。Surefire插件的test目標(biāo)綁定到了test 階段。這個(gè)目標(biāo)運(yùn)行所有的測(cè)試并且創(chuàng)建那些捕捉詳細(xì)測(cè)試結(jié)果的輸出文件。默認(rèn)情況下,如果有測(cè)試失敗,這個(gè)目標(biāo)會(huì)終止。
- jar:jar。Jar插件的jar目標(biāo)綁定到了package 階段。這個(gè)目標(biāo)把輸出目錄打包成JAR文件。
運(yùn)行package階段能很好的跟蹤一個(gè)特定的構(gòu)建中包含的所有目標(biāo),它也允許每個(gè)項(xiàng)目使用Maven來(lái)遵循一組定義明確的標(biāo)準(zhǔn)。而這個(gè)生命周期能讓開發(fā)人員從一個(gè)Maven項(xiàng)目跳到另外一個(gè)Maven項(xiàng)目,而不用知道太多每個(gè)項(xiàng)目構(gòu)建的細(xì)節(jié)。如果你能夠構(gòu)建一個(gè)Maven項(xiàng)目,那么你就能構(gòu)建所有的Maven項(xiàng)目。
Maven坐標(biāo)
POM為項(xiàng)目命名,提供了項(xiàng)目的一組唯一標(biāo)識(shí)符(坐標(biāo)),并且通過(guò)依賴 (dependencies) ,父 (parents) 和先決條件(prerequisite) 來(lái)定義和其它項(xiàng)目的關(guān)系。POM也可以自定義插件行為,提供項(xiàng)目相關(guān)的社區(qū)和開發(fā)人員的信息。Maven坐標(biāo)定義了一組標(biāo)識(shí),它們可以用來(lái)唯一標(biāo)識(shí)一個(gè)項(xiàng)目,一個(gè)依賴,或者M(jìn)avenPOM里的一個(gè)插件。
Maven install命令會(huì)把項(xiàng)目的構(gòu)建安裝到本地倉(cāng)庫(kù)。
Maven依賴管理
一個(gè)復(fù)雜的項(xiàng)目將會(huì)包含很多依賴,也有可能包含依賴于其它構(gòu)件的依賴。Maven支持傳遞性依賴,對(duì)于傳遞性依賴,只需要加上直接依賴的類庫(kù),Maven會(huì)隱式的把這些庫(kù)間接依賴的庫(kù)也加入到項(xiàng)目中。Maven也會(huì)處理這些依賴中的沖突,同時(shí)能自定義默認(rèn)行為,或者排除一些特定的傳遞依賴性。Maven在下載依賴的文件同時(shí)會(huì)下載POM文件,這是傳遞性依賴的基礎(chǔ)。Maven也提供了不同的依賴范圍。同時(shí)當(dāng)為項(xiàng)目構(gòu)建JAR文件的時(shí)候,它的依賴不會(huì)被捆綁在生成的構(gòu)建中。當(dāng)用Maven來(lái)創(chuàng)建WAR或者EAR,你可以配置Maven讓它在生成的構(gòu)件中捆綁依賴,你也可以配置Maven,使用provided范圍,讓它排除WAR文件中特定的依賴。provided范圍告訴Maven一個(gè)依賴在編譯的時(shí)候需要,但是它不應(yīng)該被捆綁在構(gòu)建的輸出中。?
其他知識(shí)
- 查看項(xiàng)目依賴:mvn dependency:resolve
- 查看整個(gè)項(xiàng)目依賴樹:mvn dependency:tree
- 執(zhí)行測(cè)試單元:mvn? test
- 忽略測(cè)試失敗:mvn test –Dmaven.test.failure.ignore=true
- 跳過(guò)單元測(cè)試:mvn install –Dmaven.test.skip=true
Maven Assembly插件是一個(gè)可以用來(lái)創(chuàng)建應(yīng)用程序特有分發(fā)包的插件,分發(fā)包包含了項(xiàng)目的二進(jìn)制文件和所有依賴。此時(shí)需要在pom中添加一下內(nèi)容:
<build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration></plugin></plugins> </build> View Code添加好配置后,可以運(yùn)行?mvn install assembly:assembly 來(lái)構(gòu)建這個(gè)裝配。
構(gòu)建多模板項(xiàng)目
一個(gè)多模板項(xiàng)目通過(guò)一個(gè)父POM引用一個(gè)或者多個(gè)子模板來(lái)定義。父項(xiàng)目不創(chuàng)建一個(gè)JAR或者WAR,它僅僅是一個(gè)引用其他Maven項(xiàng)目的POM,所以其打包類型是pom。在父模板的pom.xml中列出了項(xiàng)目的子模板,這些模塊在modules元素中定義。每個(gè)module元素對(duì)應(yīng)一個(gè)子模板。Maven知道去這些子目錄尋找pom.xml文件,并且在構(gòu)建的時(shí)候,它會(huì)將這些子模板包含到要構(gòu)建的項(xiàng)目中。在項(xiàng)目中需要使用parent元素標(biāo)記一個(gè)Maven坐標(biāo)來(lái)引用父模板pom。子模板會(huì)繼承父模板的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?當(dāng)Maven執(zhí)行一個(gè)帶有子模板的項(xiàng)目的時(shí)候,Maven首先載入父POM,然后定位所有的子模塊POM。Maven然后將所有這些項(xiàng)目的POM放入到一個(gè)稱為Maven反應(yīng)堆的東西中,由他負(fù)責(zé)分析模塊之間的依賴關(guān)系。這個(gè)反應(yīng)堆處理組件的排序,以確保相互獨(dú)立的模塊能以適當(dāng)?shù)捻樞虮痪幾g和安裝。
轉(zhuǎn)載于:https://www.cnblogs.com/wxgblogs/p/6662107.html
總結(jié)
以上是生活随笔為你收集整理的Maven学习-构建项目的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: UIView 动画进阶
- 下一篇: 浙江移动手机营业厅怎么切换账号