簡體   English   中英

Maven 和 POM.xml 中的插件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM