代碼示例
<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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<extensions>false</extensions>
<inherited>true</inherited>
<configuration>
<classifier>test</classifier>
</configuration>
<dependencies>...</dependencies>
<executions>...</executions>
</plugin>
</plugins>
</build>
</project>
除了標(biāo)準(zhǔn)的<groupId><artifactId><version>這3個(gè)標(biāo)簽外,還有其他標(biāo)簽供用戶選擇。
extensions
true/false,默認(rèn)值為false。 是否可以加載此插件的擴(kuò)展項(xiàng)。
inherited
true/false 默認(rèn)值為true。其他繼承此POM的POM文件中的插件是否繼承該插件的屬性。
configuration
這個(gè)標(biāo)簽是特定于單個(gè)插件的??梢栽谶@里指定插件Mojo可能需要的任何屬性。值得注意的是,所有配置元素(無論它們位于POM中的什么位置)都旨在將值傳遞給另一個(gè)底層系統(tǒng),比如插件。換句話說,POM模式從來不顯式地需要配置configuration中的值,但是插件goal完全有權(quán)要求配置值。
如果POM文件中聲明了父類,它將從父類POM文件中的build/plugins或pluginManagement部分繼承插件的配置。
例如:
父類插件配置內(nèi)容demo:
<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>
子類插件配置內(nèi)容demo1:
<plugin>
<groupId>my.group</groupId>
<artifactId>my-plugin</artifactId>
<configuration>
<items>
<item>child-1</item>
</items>
<properties>
<childKey>child</childKey>
</properties>
</configuration>
子類插件配置會(huì)繼承父類插件配置,繼承規(guī)則如下:
- 如果父類和子類有同一屬性配置,以子類為準(zhǔn);
- 如果父類有,子類沒有。父類配置會(huì)被繼承;
根據(jù)以上繼承規(guī)則,子類繼承父類插件配置后,屬性如下:
<plugin>
<groupId>my.group</groupId>
<artifactId>my-plugin</artifactId>
<configuration>
<!--相同屬性配置,以子類為準(zhǔn)-->
<items>
<item>child-1</item>
</items>
<properties>
<childKey>child</childKey>
<!--子類沒有的屬性,繼承該屬性-->
<parentKey>parent</parentKey>
</properties>
</configuration>
如果不想接受默認(rèn)的繼承規(guī)則,也可以通過配置屬性combine.children和combine.self來自定義繼承規(guī)則。
- combine.children="append" 相同屬性,子類插件配置和父類插件配置合并;
- combine.self="override" 相同屬性,子類配置直接覆蓋父類配置;
- 以上2個(gè)屬性同時(shí)使用,以combine.self="override"為準(zhǔn);
子類插件配置內(nèi)容demo2:
<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>
根據(jù)自定義的繼承規(guī)則,繼承生效的屬性配置為:
<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>
dependencies
依賴關(guān)系在POM中很常見,并且是所有plugins元素塊下的一個(gè)元素。依賴項(xiàng)具有與基礎(chǔ)構(gòu)建下相同的結(jié)構(gòu)和功能。
這種情況下的主要區(qū)別是,它們不再作為項(xiàng)目的依賴項(xiàng)應(yīng)用,而是作為它們所處插件的依賴項(xiàng)應(yīng)用。這樣做的好處是可以更改插件的依賴項(xiàng)列表,可以通過排除刪除未使用的運(yùn)行時(shí)依賴項(xiàng),或者更改所需的dpendent版本。