【问题标题】:What is the difference between executions and configurations in a maven plugin?maven插件中的执行和配置有什么区别?
【发布时间】:2016-02-27 18:13:34
【问题描述】:

I found this description 但似乎并不全面。有人可以详细解释一下maven插件中executions和configurations有什么区别吗?

【问题讨论】:

  • 你的意思是,除了execution has-a configuration?
  • @KevinKrumwiede 这些元素也处于相同的高度。您可以在不执行的情况下进行配置。

标签: maven maven-plugin


【解决方案1】:

<execution> 会导致插件在 maven 构建生命周期(即构建期间)执行。 <configuration> 允许您配置插件在执行期间的行为方式。许多 Maven 插件提供有关其配置选项的文档,例如maven-compiler-plugin。

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

全局执行特定配置示例:

假设,您必须使用 Java 1.7 编译您的项目,但您想尽早采用 Java 9 Jigsaw 功能并在您的项目中添加 module-info.java。此 Java 文件不会使用源代码级别 1.7 进行编译。您可以做的是定义 maven-compiler-plugin 的两个执行,一个编译除 module-info.java 之外的所有内容,源级别为 1.7,另一个只编译源级别为 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>

【讨论】:

  • 伟大的思想都一样。 :-) 当它发生时太神奇了:两个人独立地同时写或多或少相同的东西。
  • 很好的解释,非常感谢
【解决方案2】:

我认为@Stefan 的回答已经很清楚了。如果有帮助,我想更详细一点。

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

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

那就来configuration吧。有时您需要告诉插件有关插件应如何操作的额外详细信息,因为默认情况下插件可能无法猜测您想要做什么。 configuration 正在做这样的工作。你可以参考插件的目标文档,看看他们接受什么样的配置。

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

【讨论】:

    【解决方案3】:

    &lt;configuration&gt; 部分外部 &lt;execution&gt; 块通常会影响插件的行为。例如,直接通过 CLI 执行或具有绑定到默认阶段的插件将使用这种类型的配置。 compiler 插件就是此类插件的一个示例。

    另一方面,&lt;configuration&gt; 部分内部 &lt;execution&gt; 块仅适用于该特定执行。

    与往常一样,更具体的配置可以覆盖一般配置。因此,如果一般配置(在执行块之外)显示&lt;doCheck&gt;false&lt;/doCheck&gt;,则执行可能会选择仅通过执行&lt;doCheck&gt;true&lt;/doCheck&gt; 覆盖它。

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

    【讨论】:

    • 我认为通过结合所有三个答案(在撰写本文时),它应该给出一个相当一致和清晰的图片来说明它是如何工作的。
    猜你喜欢
    • 2015-05-13
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多