gpt4 book ai didi

maven - 如何触发 Maven 插件的特定执行?

转载 作者:行者123 更新时间:2023-12-04 08:56:25 26 4
gpt4 key购买 nike

我试图弄清楚是否可以在 <pluginManagement> 中定义 Maven 插件的执行。父 pom 的部分并在子项目中选择一个特定的执行,并且只有那个执行。
更具体地说,我有几个继承自我们公司范围的父 pom 的多模块项目。在 <pluginManagement>在父 pom 的部分,我有几个使用 copy-resources 目标的 maven-resources-plugin 执行,都绑定(bind)到阶段验证但使用不同的配置:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<inherited>true</inherited>
<executions>
<execution>
<id>copy-codedeploy</id>
<phase>validate</phase>
...
</execution>
<execution>
<id>copy-settings</id>
<phase>validate</phase>
...
</execution>

<execution>
<id>copy-logback</id>
<phase>validate</phase>
...
</execution>
</executions>
<plugin>
在一个子项目上试验了几个小时后,我想:
  • 避免在所有模块中不必要地执行 copy-logback,当我在父 POM 中定义执行 copy-logback 时会发生这种情况,并且具有在所有模块中创建目标文件夹层次结构的缺点。
  • 避免在父 POM 中未定义执行的情况下,在需要它的所有模块中的多个克隆副本中定义它。

  • 一个示例子项目具有这些模块,其中第一个是唯一真正需要 copy-logback 的模块:
  • 网络应用
  • 休息
  • 服务
  • 坚持

  • 我现在得到的最好的方法是将常见的执行留在父 POM 中,这给了我上面第一个列表中的第 1 项,但仍然让我在多个模块中克隆完全相同的插件配置。我正在克隆的配置是这样的:
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
    <!-- Copy logback.xml from the parent to the main resources folder, filtering the application name used in log file names. -->
    <execution>
    <id>copy-logback-file</id>
    <phase>validate</phase>
    <goals>
    <goal>copy-resources</goal>
    </goals>
    <configuration>
    <outputDirectory>${project.basedir}/src/main/resources</outputDirectory>
    <resources>
    <resource>
    <directory>${project.basedir}/../logback-templates</directory>
    <filtering>true</filtering>
    <includes>
    <include>logback.xml</include>
    </includes>
    </resource>
    </resources>
    </configuration>
    </execution>
    </executions>
    </plugin>
    不幸的是,这降低了 <pluginManagement> 的有用性。父 POM 中的部分,因为相同的配置不能只定义一次。我必须在我们使用 logback 的 Portfolio 的每个模块中定义它,这相当于数十次。
    为了解决我的重复问题,我想也许可以定义一个插件的执行,该插件可以在需要的地方有选择地触发。是否可以?

    最佳答案

    您可以在每个执行的配置中添加一个跳过参数,例如:

    <skip>${copy.logback.skip}</skip>
    然后您可以通过设置属性 <copy.logback.skip>在每个模块中选择是使用还是跳过执行。至 truefalse .

    关于maven - 如何触发 Maven 插件的特定执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63806265/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com