【发布时间】: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 没有在任何地方引用并且不会产生任何东西……哦,也许它会……嗯……解开这看起来很有趣(这就是为什么我更喜欢不太复杂的解决方案)
【问题讨论】:
标签: maven inheritance plugins pom.xml parent-pom