【发布时间】:2019-05-10 13:27:43
【问题描述】:
根据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>
考虑以下万无一失的插件。它有 2 个<configuration>。一个在<execution> 内部,另一个在外部。
这两者有什么区别?请笼统地解释,而不仅仅是为了确保插件示例。外部是否类似于全局配置?
【问题讨论】:
-
一个是全局配置,另一个是执行特定配置
-
@spi 全局配置何时运行?如果我只提到
mvn some_plugin:goal会发生全局配置还是执行一个? -
它适用于没有其他任何东西覆盖它的情况。当您调用插件的目标时(如在您的示例中),它不引用任何特定的执行,因此它将使用全局配置(但请记住,某些插件确实声明了默认执行并将其绑定到某个阶段- 在调用阶段而不是目标时可能会干扰配置解析)。
-
@spi 请添加答案,因为您的评论有效地回答了问题。
-
@JFMeier 我通常不发布答案,因为我不在乎声誉......