I found this description但似乎并不全面。有人可以详细解释maven插件中configurations
和{{1}}之间的区别吗?
答案 0 :(得分:3)
<execution>
导致插件在maven构建生命周期中执行,即在构建期间执行。 <configuration>
允许您配置插件在执行期间的行为方式。许多Maven插件提供有关其配置选项的文档,例如: maven-compiler-plugin。
您可以在<configuration>
级别或<plugin>
级别定义<execution>
。前者对所有执行都是全局有效的,后者特定于执行。
全局执行特定配置的示例:
假设您必须使用Java 1.7编译项目,但是您希望尽早采用Java 9 Jigsaw功能并在项目中添加module-info.java
。此Java文件不会使用源级别1.7进行编译。你可以做的是定义maven-compiler-plugin的两个执行,一个编译除了源代码级别为1.7的module-info.java
之外的所有内容,另一个只编译源代码级别为1.9的module-info.java
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<!-- Global plugin configuration for source and target levels. -->
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
<executions>
<!-- Compile all code except module-info.java with the configured source level -->
<execution>
<id>default-compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<excludes>
<exclude>module-info.java</exclude>
</excludes>
</configuration>
</execution>
<!-- Compile module-info.java with source level 1.9 -->
<execution>
<id>compile-module-info-java</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<source>1.9</source>
<target>1.9</target>
<includes>
<include>module-info.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
答案 1 :(得分:1)
<configuration>
部分在之外的<execution>
块会以一般方式影响插件的行为。例如,直接通过CLI执行或具有绑定到的默认阶段的插件将使用此类配置。这种插件的一个例子是compiler插件。
另一方面,<configuration>
块内的<{1}}部分 <execution>
块仅适用于该特定执行。
与往常一样,更具体的配置可以覆盖常规配置。因此,如果一般配置(在执行块之外)显示<doCheck>false</doCheck>
,执行可能会选择仅通过执行<doCheck>true</doCheck>
来覆盖它。
一般配置的另一个特性是它们的参数将由该插件的所有执行继承。
答案 2 :(得分:1)
我认为来自@Stefan的回答已经很清楚了。如果有帮助,我想更加冗长。
插件下的“执行”声明“什么时候应该做什么”。基本上,execution
通常至少包含:phase
和goal
(我知道你并不总是在配置中看到它,但在概念上它们就在那里),你可以看到它:当构建过程达到phase
时,将执行插件的goal
操作。
当然,您可以为插件添加多个execution
,以便可以在不同/相同的阶段运行不同/相同的目标。
然后来configuration
。有时您需要告诉插件有关插件应该如何操作的额外细节,因为插件可能无法猜测默认情况下您想要做什么。 configuration
正在做这样的工作。您可以参考插件目标文档,了解他们接受的配置类型。
插件级configuration
将应用于插件的所有execution
,同时您还可以在每个configuration
下定义execution
,其中execution
用作configuration
- 特定配置。插件级configuration
+执行级execution
是.next()
收到的“真实”配置。