maven插件中的执行和配置有什么区别?

maven插件中的执行和配置有什么区别?,maven,maven-plugin,Maven,Maven Plugin,但它似乎并不全面。有人能详细解释一下maven插件中的执行和配置之间的区别吗?一个导致插件在maven构建生命周期中执行,即在您的构建过程中。允许您配置插件在执行期间的行为。许多Maven插件提供有关其配置选项的文档,例如 您可以在级别或级别上定义s。前者对所有执行全局有效,后者特定于执行 全局执行特定配置示例: 假设您必须使用Java1.7编译项目,但您希望尽早采用Java9特性,并在项目中添加模块info.Java。此Java文件不会使用源代码级别1.7进行编译。您可以定义maven编译器插

但它似乎并不全面。有人能详细解释一下maven插件中的
执行
配置
之间的区别吗?

一个
导致插件在maven构建生命周期中执行,即在您的构建过程中。
允许您配置插件在执行期间的行为。许多Maven插件提供有关其配置选项的文档,例如

您可以在
级别或
级别上定义
s。前者对所有执行全局有效,后者特定于执行

全局执行特定配置示例:

假设您必须使用Java1.7编译项目,但您希望尽早采用Java9特性,并在项目中添加
模块info.Java
。此Java文件不会使用源代码级别1.7进行编译。您可以定义maven编译器插件的两个执行,一个使用源代码级别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>

org.apache.maven.plugins
maven编译器插件
3.3
1.7
1.7
默认编译
编译
编译
module-info.java
编译模块信息java
编译
编译
1.9
1.9
module-info.java
一个
块外的
部分通常会影响插件的行为。例如,直接通过CLI执行或绑定到默认阶段的插件将使用这种类型的配置。插件就是这样一个例子

另一方面,
块中的
部分仅适用于该特定执行

与往常一样,更具体的配置可以覆盖常规配置。因此,如果一个常规配置(在执行块之外)说
false
,那么执行可能会选择只通过执行
true
来覆盖它


通用配置的另一个特点是,它们的参数将被该插件的所有执行所继承。

我认为@Stefan的答案已经非常清楚了。我想更详细一点,以防有帮助

插件下的“执行”声明“什么时候应该做什么”。基本上,
执行
通常至少包含:
阶段
目标
(我知道您并不总是在配置中看到它,但概念上它们都在那里),您可以将其视为:当构建过程达到
阶段
时,插件的
目标
操作将被执行

当然,一个插件可以有多个
执行
s,这样不同/相同的目标可以在不同/相同的阶段运行

然后进入
配置
。有时候,你需要告诉插件更多关于插件应该如何操作的细节,因为插件可能无法猜到默认情况下你想要做什么<代码>配置
正在做这样的工作。你们可以参考插件的目标文档,看看他们接受什么样的配置


插件级
配置
将应用于插件的所有
执行
,同时您还可以在每个
执行
下定义
配置
,作为
执行
特定配置。插件级
配置
+执行级
配置
执行
所接收的“真实”配置

你的意思是,除了
执行
具有-a
配置
?@kevinkrumwied之外,这些元素也处于相同的高度。你可以在没有执行的情况下拥有一个配置。伟人的想法是一样的。:-)当它发生时,令人惊讶:两个人独立地同时写了或多或少相同的东西。我认为,通过综合所有三个答案(在写作时),应该可以给出一个非常一致和清晰的画面,说明这是如何工作的。