控制每次执行时继承的 Maven 插件

Posted

技术标签:

【中文标题】控制每次执行时继承的 Maven 插件【英文标题】:Controlling Maven plugin inheriting per execution 【发布时间】:2021-05-09 10:05:10 【问题描述】:

我有一个项目,它由一个父 POM 和一个模块(我们称之为“lib”)组成。在父 POM 中,我定义了一个具有两个执行的插件(以前只有一个)。其中一个执行(新的)必须由模块继承,另一个不能。

所以目前的结构是这样的:

toplevel/pom.xml(无父级;父级 POM 加上 <module>lib</module>) toplevel/lib/pom.xml(父级:../pom.xml

我曾经在插件配置中有<inherited>false</inherited>;这显然不再起作用了。

我定义了一个配置文件 build-this 来调用构建,我想也许只是拆分插件配置,配置文件中的一个 <plugin> 块与 <inherited>false</inherited> 和另一个在主 <build> 块中(在所有配置文件之外)没有那个,但似乎<inherited>false</inherited> 是在插件块合并之后应用的,而不是之前。

如何通过执行控制插件继承?


我有一个想法,它过于复杂,需要做很多工作,但可能会:

将父 POM 移到第二个模块中 创建一个新的*** POM,它使用 <relativePath>parent/</relativePath>(而不是隐含的 <relativePath>../</relativePath>)来查找其父 POM 仅将旧父级中的 <modules> 和所有不得继承的插件调用添加到*** POM 并将它们从新父级模块中删除 将 <relativePath>../parent/</relativePath> 添加到 lib 模块的 POM 中,使其找到其父 POM

所以这个:

toplevel/pom.xml(父级:parent/pom.xml<module>parent</module> <module>lib</module>) toplevel/lib/pom.xml(父级:../parent/pom.xml) toplevel/parent/pom.xml(无父)

这看起来好听吗?它仍然有点落后(特别是因为它也会导致将新的*** POM 安装到 Maven Central 中¹),所以仍然欢迎使用更好的方法来处理这个问题。

①我可能会尝试this 技巧或者更好的this 来避免这种情况……鉴于新的***POM 没有在任何地方引用并且不会产生任何东西……哦,也许它会……嗯……解开这看起来很有趣(这就是为什么我更喜欢不太复杂的解决方案)

【问题讨论】:

【参考方案1】:

大部分插件都有<skip> 参数。如果您的插件是这种情况,您可以定义两个属性,如<skip.firstexecution><skip.secondexecution>,并将它们放入相应执行的配置中,如<skip>$skip.firstexecution</skip>

然后您可以通过将此属性设置为true来跳过模块中的执行。

【讨论】:

嗯。这可能只是工作,或者它可能仍然跳过整个插件...... 如果在执行中设置,只会跳过执行。

以上是关于控制每次执行时继承的 Maven 插件的主要内容,如果未能解决你的问题,请参考以下文章

maven 插件执行的隐式 ID 是啥?

使用 exec 插件从 Maven 3 执行脚本 - 被阻止

maven-聚合与继承

使用 jmeter maven 插件测试订单执行

在测试执行 Maven Surefire 插件时排除日志跟踪

避免maven package 打包时执行 mybatis-generator-maven-plugin 插件