【问题标题】:Plugins in Maven and POM.xmlMaven 和 POM.xml 中的插件
【发布时间】:2022-01-17 12:53:36
【问题描述】:

我刚开始使用 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 标记之后?有关系吗?

【问题讨论】:

    标签: java maven maven-3 pom.xml maven-plugin


    【解决方案1】:
    <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 配置文件,您还可以将插件放在 &lt;profile&gt;&lt;build&gt; 部分。顺序无关紧要。

    【讨论】:

    • 我有一个用于 api 自动化测试的多 pom 项目。其中一个 Maven 项目具有自动化测试。项目 pom 的构建部分只有 1 个插件 - 参考套件的 maven surefire 插件。整个构建标签已被删除。你能告诉我这是什么意思吗?谢谢。
    【解决方案2】:

    关于两个重点的后期澄清

    在哪里放置plugin
    build/plugins 部分中的大多数情况下确实应该添加plugin,但是将其放在plugins 中与将其放在@987654337 中之间存在一个重要区别 @/plugins.

    这种误解通常是 Maven 中未调用插件或更难排除故障的原因:

    • build/plugins 下的插件直接是默认 Maven 构建的一部分,如果它们指定了 execution 或者如果它们为默认构建配置了某些内容(见下文)
    • build/pluginManagement/plugins 下的插件不一定是默认的 Maven 构建的一部分,也就是说,它是一个管理,它是对 maven 的一个提示:如果你碰巧使用了这个插件,那么请使用我在此管理中指定的版本、配置和执行。

      但是 happen to use 是什么意思? 意思是:如果同一插件出现在build/plugins 部分,然后应用此管理(只有这样它才会有效); 如果插件默认被 Maven 调用,那么也应用它。

      但是默认情况下如何调用插件?这是 maven 背后的主要理念的一部分:约定优于配置。按照惯例,当您指定某个packaging(默认为jar,但例如可以是war)时,您希望调用某些插件。要构建jarby default,请调用maven-jar-plugin;构建warby default 调用maven-war-plugin 等等。因此,如果您在 build/pluginManagement/plugin 中为默认绑定到 Maven 构建的插件指定插件配置,那么它也会被使用。

    订购
    关于pom.xml 文件中部分的顺序,需要进一步说明:在大多数情况下确实无关紧要,但是plugin 元素在build/@987654360 中的顺序@ 部分可能很重要。由于 Maven 3.0.3 (MNG-2258),附加到同一 Maven 阶段的不同插件执行将按照它们在 pom.xml 文件中的声明顺序被调用。也就是说,在这种情况下,排序很重要,因为它可能会影响构建的行为。

    此外,dependency 声明的顺序也可能会影响您对Dependency Mediation 的构建,也就是说,在与传递依赖项发生冲突的情况下,第一个声明的依赖项获胜。因此,在某些情况下排序很重要

    最后但并非最不重要的一点,虽然对于pom.xml 文件的其他部分的顺序并不重要,但良好的习惯是遵循官方的Maven recommendations,并且作为简化版本,请遵循以下声明顺序:

    <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 
    

    进一步阅读

    【讨论】:

    • 解释得很好。谢谢!
    • "或者如果插件默认被Maven调用"谢谢;这是我怀疑的,但直到这篇文章才能验证。在讨论pluginManagement 时,从未将其作为规则的例外提及;总有人说,除非您从pluginManagement 显式调用插件,否则它永远不会运行。这通常是正确的,除了包类型的默认插件绑定。谢谢你解释得这么好。
    【解决方案3】:

    &lt;plugin&gt; 应放入 &lt;plugins&gt; 部分,该部分应放入 &lt;build&gt;&lt;pluginManagement&gt; 部分。 &lt;dependency&gt;&lt;build&gt; 部分的顺序无关紧要。

    关于 pom.xml 的完整参考在这里:http://maven.apache.org/pom.html

    【讨论】:

    • 我有一个用于 api 自动化测试的多 pom 项目。其中一个 Maven 项目具有自动化测试。项目 pom 的构建部分只有 1 个插件 - 参考套件的 maven surefire 插件。整个构建标签已被删除。你能告诉我这是什么意思吗?谢谢。
    【解决方案4】:

    如果你想使用插件进行构建,你可以使用下面的结构。

    <project>
     <build>
      <plugins>
      </plugins>
     </build>
    </project>
    

    【讨论】:

    • 好的。您的意思是为了将插件标签添加到上面的文件中,我只需要添加 .. 并且不需要添加 标记,因为它已经存在于顶部。我说的对吗?
    • 是的,您不需要再次添加项目。我只是给出了完整的结构。
    • @SubirKumarSao - 我有一个用于 api 自动化测试的多 pom 项目。其中一个 Maven 项目具有自动化测试。项目 pom 的构建部分只有 1 个插件 - 参考套件的 maven surefire 插件。整个构建标签已被删除。你能告诉我这是什么意思吗?谢谢。
    【解决方案5】:

    您可以在 pom.xml 文件中两个 &lt;plugins&gt; &lt;/plugins&gt; 标记之间的任意位置插入第二个 sn-p。

    【讨论】:

      【解决方案6】:

      POM 中的节顺序无关紧要。一般来说,Maven 中有构建插件和报告插件。您的情况是使用构建插件,因此您必须将此 &lt;plugin&gt; 块放入 &lt;project&gt;&lt;build&gt;&lt;plugins&gt;... 部分。

      查看this 了解有关插件的一些基础知识。

      【讨论】:

        【解决方案7】:

        作为报告插件的附加答案(例如 maven-checkstyle-plugin),有 2 个标签可以在 pom.xml 中的构建和报告下放置插件。

        使用报告标签 VS 构建标签

        在 or 元素中配置报告插件 在 pom 中没有相同的行为!

        mvn 网站

        它只使用定义在 元素中指定的每个报告插件的元素, 即站点总是忽略在 中指定的每个插件的元素。

        mvn aplugin:areportgoal

        它首先使用元素中定义的参数 元素中指定的每个报告插件;如果一个 未找到参数,它将查找定义在 中指定的每个插件的元素。

        来源:https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_reporting_Tag_VS_build_Tag

        【讨论】:

          猜你喜欢
          • 2014-07-27
          • 1970-01-01
          • 2014-10-26
          • 2020-06-02
          • 2021-04-08
          • 2017-06-07
          • 1970-01-01
          • 2011-05-10
          • 1970-01-01
          相关资源
          最近更新 更多