控制每次执行时继承的 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 插件的主要内容,如果未能解决你的问题,请参考以下文章
使用 exec 插件从 Maven 3 执行脚本 - 被阻止