60

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

4

7 回答 7

68
<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 配置文件,您还可以将插件放置在<build>部分中。<profile>顺序无关紧要。

于 2012-05-11T07:58:50.023 回答
25

对两个重要点的后期澄清

plugin在大多数情况下,确实应该在/部分中添加放置
A的位置,但是将其放置在其中与将其放置在/之间存在重要区别pluginbuildpluginspluginspluginManagementplugins

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

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

    但是使用手段会发生什么?意思是:如果/部分存在相同的插件,则应用此管理(只有这样它才会有效);或者如果插件默认被 Maven 调用,那么也应用它。 buildplugins

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

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

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

最后但同样重要的是,虽然文件的其他部分的顺序并不重要,但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 

进一步阅读

于 2016-06-15T11:32:17.680 回答
5

<plugin>应该放入<plugins>应该放入<build><pluginManagement>部分的部分。<dependency>或部分的顺序<build>无关紧要。

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

于 2012-05-11T07:55:25.877 回答
4

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

<project>
 <build>
  <plugins>
  </plugins>
 </build>
</project>
于 2012-05-11T07:57:44.290 回答
2

您可以在 pom.xml 文件中两个<plugins> </plugins>标签之间的任何位置插入第二个代码段。

于 2012-05-11T07:54:06.533 回答
2

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

看看这个关于插件的一些基础知识。

于 2012-05-11T07:58:34.053 回答
0

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

使用报告标签 VS 构建标签

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

mvn网站

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

mvn aplugin:areportgoal

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

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

于 2020-02-13T06:58:13.297 回答