当前位置: 首页 > 知识库问答 >
问题:

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

包阳成
2023-03-14

我试图弄清楚是否有可能在<代码>

更具体地说,我有几个多模块项目继承了我们公司范围内的母公司pom。在<代码>

<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>

在对一个儿童项目进行了数小时的实验后,我想:

  1. 避免在所有模块中执行不必要的拷贝回写,当我在父POM中定义执行拷贝回写时会发生这种情况,并且有在所有模块中创建目标文件夹层次结构的缺点
  2. 避免在父POM中未定义执行的情况下,在需要的所有模块中的多个克隆副本中定义执行

一个示例子项目包含以下模块,其中第一个模块是真正需要拷贝回写的唯一模块:

  • 网络应用程序

我现在得到的最好的是在父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>

不幸的是,这会降低的有用性

为了解决我的复制问题,我想也许可以定义一个插件的执行,该插件可以在需要的地方有选择地触发。有可能吗?


共有1个答案

曾新立
2023-03-14

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

<skip>${copy.logback.skip}</skip>

然后您可以通过设置属性在每个模块中选择是使用还是跳过执行

 类似资料:
  • 我们在Jenkins中使用gerrit-trigger,当一个新的变更集被推送审查时,构建被触发。 现在我们要介绍管道,并在供应链管理中使用定义管道的解决方案 因此我们希望当构建被触发时,下面的管道插件可以工作来检查这个refspec

  • 我用的是孔晨的招摇maven插件。此外,我还使用maven发布插件。大摇大摆。由swagger maven插件生成的json不是repo的一部分。如果我用mvn包构建应用程序,那就太夸张了。json被生成并成为jar的一部分。 如果我用maven release插件发布应用程序,那就大摇大摆了。json不是jar文件的一部分。我查看了日志,发现maven release插件有三个步骤——发布:清理

  • 问题内容: 我有一个名为“ TestPipeline”的詹金斯管道作业。我想在两个不同的从属服务器上触发构建,标记为“ tester1”和“ tester2”,并且管道脚本在这里非常简单: 但是,当我运行TestPipeline作业时,“ test_job”将不会在我分配的节点上运行。但改为在随机节点上运行。 我想知道是否应该在我的“ test_job”上设置“限制可以在哪里运行该项目”。因此,我

  • 我是maven的新手,学习如何以及何时在插件中执行阶段/目标 假设我的pom中有以下代码片段 现在,如果我执行mvn安装,安装之前的modello的所有阶段(以及每个阶段对应的所有目标)都将执行。正当 但是,如果进行以下修改以引入特定目标,则只会执行一个目标,即java目标(因为它位于安装阶段之前的生成源代码阶段)。对吗?

  • 问题内容: 我有一个配置了执行的插件(antrun),该插件具有一个id,并且未绑定到任何阶段。我可以直接从命令行执行此执行吗? 用以下命令运行它: 或者至少 问题答案: 133 此功能已实现为MNG-5768,并且在Maven 3.3.1中可用。 更改将: 扩展直接插件调用语法,以允许可选的@ execution-id参数,例如org.apache.maven.plugins:maven-rem

  • 我正在尝试使用shade插件创建一个可执行JAR的简单示例。我逐行浏览了这里的示例,在我的机器上似乎根本没有执行shade插件。 我的阴影POM代码是: 运行“mvn包”后,创建的JAR不包含任何项目依赖项。从调试跟踪来看,似乎从未调用过shade插件。要让shade发挥其魔力,是否还需要一些额外的步骤? 编辑:示例的完整代码位于https://github.com/hutch31/maven-s