微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决控制每次执行继承的 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 举报,一经查实,本站将立刻删除。