日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Maven的pom.xml文件详解------Build Settings

發布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Maven的pom.xml文件详解------Build Settings 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自??Maven的pom.xml文件詳解------Build Settings

根據POM 4.0.0 XSD,build元素概念性的劃分為兩個部分:BaseBuild(包含poject build和profile build的公共部分,見下)和poject build包含的一些高級特性。?

<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">...<!-- "Project Build" contains more elements than just the BaseBuild set --><build>...</build><profiles><profile><!-- "Profile Build" contains a subset of "Project Build"s elements --><build>...</build></profile></profiles> </project>

?

BaseBuild元素集合

basic elements

<build><defaultGoal>install</defaultGoal><directory>${basedir}/target</directory><finalName>${artifactId}-${version}</finalName><filters><filter>filters/filter1.properties</filter></filters>... </build>

1、defaultGoal:執行build任務時,如果沒有指定目標,將使用的默認值,如:在命令行中執行mvn,則相當于執行mvn install;?
2、directory:build目標文件的存放目錄,默認在${basedir}/target目錄;?
3、finalName:build目標文件的文件名,默認情況下為${artifactId}-${version};?
4、filter:定義*.properties文件,包含一個properties列表,該列表會應用的支持filter的resources中。也就是說,定義在filter的文件中的"name=value"值對會在build時代替${name}值應用到resources中。Maven的默認filter文件夾是${basedir}/src/main/filters/。

?

resources

build的另一個特征是指定你的項目中resources的位置。resources(通常)不是代碼,他們不被編譯,但是被綁定在你的項目或者用于其它什么原因,例如代碼生成。

<build>...<resources><resource><targetPath>META-INF/plexus</targetPath><filtering>false</filtering><directory>${basedir}/src/main/plexus</directory><includes><include>configuration.xml</include></includes><excludes><exclude>**/*.properties</exclude></excludes></resource></resources><testResources>...</testResources>... </build>

1、resources:一個resource元素的列表,每一個都描述與項目關聯的文件是什么和在哪里;?
2、targetPath:指定build后的resource存放的文件夾。該路徑默認是basedir。通常被打包在JAR中的resources的目標路徑為META-INF;?
3、filtering:true/false,表示為這個resource,filter是否激活。?
4、directory:定義resource所在的文件夾,默認為${basedir}/src/main/resources;?
5、includes:指定作為resource的文件的匹配模式,用*作為通配符;?
6、excludes:指定哪些文件被忽略,如果一個文件同時符合includes和excludes,則excludes生效;?
7、testResources:定義和resource類似,但只在test時使用,默認的test resource文件夾路徑是${basedir}/src/test/resources,test resource不被部署。?

?

Plugins

<build>...<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.0</version><extensions>false</extensions><inherited>true</inherited><configuration><classifier>test</classifier></configuration><dependencies>...</dependencies><executions>...</executions></plugin></plugins> </build>

?除了groupId:artifactId:version標準坐標,plugin還需要如下屬性:?
1、extensions:true/false,是否加載plugin的extensions,默認為false;?
2、inherited:true/false,這個plugin是否應用到該POM的孩子POM,默認true;?
3、configuration:配置該plugin期望得到的properies,如上面的例子,我們為maven-jar-plugin的Mojo設置了classifier屬性;?

如果你的POM有一個parent,它可以從parent的build/plugins或者pluginManagement集成plugin配置。

為了闡述繼承后的關系,考慮如果parent POM中存在如下plugin:

<plugin><groupId>my.group</groupId><artifactId>my-plugin</artifactId><configuration><items><item>parent-1</item><item>parent-2</item></items><properties><parentKey>parent</parentKey></properties></configuration> </plugin>

?然后在繼承的孩子POM中做如下配置:

<plugin><groupId>my.group</groupId><artifactId>my-plugin</artifactId><configuration><items><item>child-1</item></items><properties><childKey>child</childKey></properties></configuration> </plugin>

這樣孩子POM和parent POM中都存在groupId為my.group的plugin,Maven默認的行為將是根據屬性名稱將兩個plugin的configuration的內容進行合并。如果孩子POM中有一個屬性,則該屬性是有效的,如果孩子POM中沒有一個屬性,但parent POM中存在,則parent中的屬性是有效的。

根據這些規則,上面的例子在Maven中將得到:

<plugin><groupId>my.group</groupId><artifactId>my-plugin</artifactId><configuration><items><item>child-1</item></items><properties><childKey>child</childKey><parentKey>parent</parentKey></properties></configuration> </plugin>

通過在configuration元素中增加combine.children和combine.self屬性,孩子POM可以控制Maven怎么合并plugin的configuration。

假定這兒是孩子POM的configuration:

<configuration><items combine.children="append"><!-- combine.children="merge" is the default --><item>child-1</item></items><properties combine.self="override"><!-- combine.self="merge" is the default --><childKey>child</childKey></properties> </configuration>

則,現在合并后的效果如下:

<configuration><items combine.children="append"><item>parent-1</item><item>parent-2</item><item>child-1</item></items><properties combine.self="override"><childKey>child</childKey></properties> </configuration>

combine.children="append"表示父POM和子POM的屬性合并起來;

combine.self="override"表示子POM的屬性完全覆蓋父POM的。

4、dependencies:同base build中的dependencies有同樣的結構和功能,但這里是作為plugin的依賴,而不是項目的依賴。
5、executions:plugin可以有多個目標,每一個目標都可以有一個分開的配置,甚至可以綁定一個plugin的目標到一個不同的階段。executions配置一個plugin的目標的execution。

假定一項綁定antrun:run目標到verify階段,我們希望任務響應build文件夾,同時避免傳遞配置到他的孩子POM。你將得到一個execution:

<build><plugins><plugin><artifactId>maven-antrun-plugin</artifactId><version>1.1</version><executions><execution><id>echodir</id><goals><goal>run</goal></goals><phase>verify</phase><inherited>false</inherited><configuration><tasks><echo>Build Dir: ${project.build.directory}</echo></tasks></configuration></execution></executions></plugin></plugins> </build>

id:標識,用于和其他execution區分。當這個階段執行時,它將以這個形式展示:[plugin:goal execution: id]。在這里為: [antrun:run execution: echodir];

goals:一個plugin的execution的目標列表;

phase:目標執行的階段,具體值看Maven的生命周期列表;

inherited:是否繼承;

configuration:在指定的目標下的配置。

Plugin Management

pluginManagement的元素的配置和plugins的配置是一樣的,只是這里的配置只是用于集成,在孩子POM中指定使用。例如,在父POM中做如下配置:

<build>...<pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.2</version><executions><execution><id>pre-process-classes</id><phase>compile</phase><goals><goal>jar</goal></goals><configuration><classifier>pre-process</classifier></configuration></execution></executions></plugin></plugins></pluginManagement>... </build>

則在孩子POM中,我們只需要配置:?

<build>...<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId></plugin></plugins>... </build>

這樣就可以大大的簡化孩子POM中的配置。?

?

Reporting

Reporting包含的屬性對應到site階段(見Maven生命周期)。特定的Maven插件能產生定義和配置在reporting元素下的報告,例如:產生Javadoc報告。

<reporting><outputDirectory>${basedir}/target/site</outputDirectory><plugins><plugin><artifactId>maven-project-info-reports-plugin</artifactId><version>2.0.1</version><reportSets><reportSet></reportSet></reportSets></plugin></plugins> </reporting>

對于reportSets:?

<reportSets><reportSet><id>sunlink</id><reports><report>javadoc</report></reports><inherited>true</inherited><configuration><links><link>http://java.sun.com/j2se/1.5.0/docs/api/</link></links></configuration></reportSet> </reportSets>

?

總結

以上是生活随笔為你收集整理的Maven的pom.xml文件详解------Build Settings的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。