maven 插件的多个配置标签

Multiple configuration tags for maven plugins

根据maven POM reference,我们可以为maven插件定义多个<configuration>标签。

        <plugin>
            <groupId/>
            <artifactId/>
            <version/>
            <extensions/>
            <executions>
                <execution>
                <id/>
                <phase/>
                <goals/>
                <inherited/>
                <configuration/>

            </execution>

        </executions>
        <dependencies>
            ...
        </dependencies>
        <goals/>
        <inherited/>
        <configuration/>
    </plugin>

如果您能看到一个 <configuration><execution> 标签内,另一个在标签外。让我们举个例子看得更清楚:

示例:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <executions>
      <execution>
        <id>default-test</id>
        <phase>test</phase>
        <goals>
          <goal>test</goal>
        </goals>
        <configuration>
          <includes>
            <include>**/*Tests.java</include>
            <include>**/*Test.java</include>
          </includes>
          <excludes>
            <exclude>**/Abstract*.java</exclude>
          </excludes>
        </configuration>
      </execution>
    </executions>

    <configuration>
      <includes>
        <include>**/*Tests.java</include>
        <include>**/*Test.java</include>
      </includes>
      <excludes>
        <exclude>**/Abstract*.java</exclude>
      </excludes>
    </configuration>

  </plugin>

考虑以下 surefire 插件。它有 2 <configuration>。一个在 <execution> 里面,一个在外面。

两者有什么区别?请用一般术语解释,而不仅仅是针对 surefire 插件示例。外面是不是全局配置之类的东西?

一个是全局配置,一个是execution-specific配置

全局应用只要没有其他东西覆盖它。当您调用插件的目标时(如您的示例所示),它不会引用任何特定的执行,因此它将使用全局配置

但请记住,某些插件会声明默认执行并将其绑定到某个阶段 - 这可能会在调用阶段而不是目标时干扰配置解析。