[英]Plugins in Maven and POM.xml
我剛開始使用 Maven,我讀到插件是可以使用的附加組件。
pom.xml
文件的典型結構是
<project>
<groupId>org.koshik.javabrains</groupId>
<artifactId>JarName</artifactId> (A fldernamed JarName was created)
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>JarName</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
問題:我應該在哪里插入plugin
標簽? 例如以下內容:
<plugin>
<groupId>org.jibx</groupId>
<artifactId>jibx-maven-plugin</artifactId>
<version>1.2.4</version>
<executions>
<execution>
<goals>
<goal>bind</goal>
</goals>
</execution>
</executions>
</plugin>
在依賴之前還是在dependency
標簽之后? 有關系嗎?
<project>
<groupId>org.koshik.javabrains</groupId>
<artifactId>JarName</artifactId> (A fldernamed JarName was created)
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>JarName</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.jibx</groupId>
<artifactId>jibx-maven-plugin</artifactId>
<version>1.2.4</version>
<executions>
<execution>
<goals>
<goal>bind</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
如果您使用 maven 配置文件,您還可以將插件放在<profile>
的<build>
部分。 順序無關緊要。
對兩個重要點的遲到澄清
放置plugin
一個plugin
確實應該在大多數內的情況下被添加build
/ plugins
部分,但有將其內的一個重要區別plugins
反對將其內pluginManagement
/ plugins
。
這種誤解通常是 Maven 中未調用的插件或更難的故障排除的原因:
build
/ plugins
下的plugins
直接是默認 Maven 構建的一部分,如果它們指定execution
或為默認構建配置一些東西(見下文) build
/ pluginManagement
/ plugins
下的plugins
不一定是Maven默認構建的一部分,也就是管理,是對maven的一個提示:如果你碰巧使用這個插件,那么請使用版本,配置,執行我在此指定,在此管理中。
但是碰巧使用的手段? 意思是:如果同樣的插件也出現在build
/ plugins
部分,那么應用這個管理(只有這樣它才會有效); 或者如果插件默認被 Maven 調用,那么也應用它。
但是默認情況下如何調用插件? 這是 maven 背后的主要哲學的一部分:約定優於配置。 按照慣例,當您指定某個packaging
(默認jar
,但它可以是war
例如)時,您希望調用某些插件。 要構建jar
, 默認情況下調用maven-jar-plugin
; 要構建war
, 默認情況下調用maven-war-plugin
等。 因此,如果您在build
/ pluginManagement
/ plugin
為具有默認綁定到 Maven 構建的插件指定插件配置,那么它也將被使用。
訂購
關於pom.xml
文件中部分的順序,需要進一步說明:在大多數情況下確實無關緊要,但是build
/ plugins
部分中plugin
元素的順序可能很重要。 從 Maven 3.0.3 ( MNG-2258
) 開始,附加到同一 Maven 階段的不同插件執行將按照它們在pom.xml
文件中的聲明順序被調用。 也就是說,在這種情況下,排序很重要,因為它可能會影響構建的行為。
此外, dependency
聲明的順序也可能影響您對依賴中介的構建,也就是說,如果與傳遞依賴發生沖突,第一個聲明的依賴將獲勝。 因此,再次重申,在某些情況下,排序很重要。
最后但並非最不重要的是,雖然順序對於pom.xml
文件的其他部分並不重要,但好的習慣是遵循Maven官方建議,並且作為簡化版本,遵循以下聲明順序:
<project>
<modelVersion/>
<parent/>
<groupId/>
<artifactId/>
<version/>
<packaging/>
<properties/>
<dependencyManagement/>
<dependencies/>
<build/>
<reporting/>
<profiles/>
</project>
sortpom-maven-plugin
也可用於自動應用此標准排序,只需在相關pom.xml
文件上調用以下內容:
mvn com.github.ekryd.sortpom:sortpom-maven-plugin:2.5.0:sort \
-Dsort.keepBlankLines -Dsort.predefinedSortOrder=recommended_2008_06
進一步閱讀:
<plugin>
應該放在<plugins>
部分,而<plugins>
部分應該放在<build>
或<pluginManagement>
部分。 <dependency>
或<build>
部分的順序無關緊要。
關於 pom.xml 的完整參考在這里: http : //maven.apache.org/pom.html
如果您想使用插件進行構建,您可以使用以下結構。
<project>
<build>
<plugins>
</plugins>
</build>
</project>
您可以在 pom.xml 文件中兩個<plugins>
</plugins>
標記之間的任何位置插入第二個代碼段。
POM 中的節順序無關緊要。 一般來說,Maven 中有構建插件和報告插件。 您的情況是使用構建插件,因此您必須將此<plugin>
塊放入<project><build><plugins>...
部分。
看看這個關於插件的一些基礎知識。
作為報告插件(例如 maven-checkstyle-plugin)的附加答案,有 2 個標簽,插件可以在 pom.xml 下,在構建和報告下。
使用報告標簽 VS 構建標簽
在 pom 中的 or 元素中配置報告插件沒有相同的行為!
網站
它僅使用元素中指定的每個報告插件的元素中定義的參數,即站點始終忽略 中指定的每個插件的元素中定義的參數。
mvn aplugin:areportgoal
它首先使用元素中指定的每個報告插件的元素中定義的參數; 如果未找到參數,它將查找在 中指定的每個插件的元素中定義的參數。
來源: https : //maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_reporting_Tag_VS_build_Tag
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.