如何解决控制每次执行继承的 Maven 插件
我有一个项目,它由一个父 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 没有在任何地方被引用并且不会产生任何东西……哦,也许它会……嗯……解决这个问题看起来很有趣(这就是为什么我更喜欢不那么复杂的解决方案)
解决方法
大多数插件都有 <skip>
参数。如果您的插件是这种情况,您可以定义两个属性,如 <skip.firstexecution>
和 <skip.secondexecution>
,并将它们放入相应执行的配置中,如 <skip>${skip.firstexecution}</skip>
。
然后您可以通过将此属性设置为 true
来跳过模块中的执行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。