【问题标题】:Force maven to fail if two dependencies are included at the same time如果同时包含两个依赖项,则强制 maven 失败
【发布时间】:2014-03-29 15:12:54
【问题描述】:

我有一个具有以下结构的项目:

parent
 > core
 > module-1 (with dependencies: A, B)
 > module-2 (with dependencies: X, Y)
 > project  

module-1module-2 在不同的环境中提供相同的功能(数据访问)。 模块project 依赖于core,以及module-1module-2

问题:如果我让project 依赖于module-1module-2,就会有很多不必要的传递依赖(例如,我在部署到时不需要 X 或 Y环境#1,因为那里只使用了module-1)。

如果module-1module-2 都被指定为project 的依赖项,我希望尽早使构建失败。

我编写了一个查找每个模块的测试,如果都找到了则失败,但我认为应该有一种更简单/更直接的方法来做到这一点。

【问题讨论】:

  • (如果有办法,我没听说过if ...)

标签: java maven


【解决方案1】:

您可以为不同的环境使用不同的配置文件。如需更广泛的答案,请查看Different dependencies for different build profiles in maven

【讨论】:

  • 我认为我正在尝试重新发明配置文件(嗯...实际上我不能强制通过配置文件排除不必要的模块,但这并不重要,因为我可以为每组依赖项定义一个配置文件)。谢谢。
【解决方案2】:

这是一个非常奇怪的案例。以下可能有效,也可能无效,但我认为这是一个值得的想法,如果你愿意敲一些代码,如果你不得不这样做:

  • module-1module-2 分到单独的项目中,而不是将它们作为<modules/>

  • 查看maven-enforcer-pluginenforcer rules。您可能必须编写自己的规则。

  • 将 module-1 和 module-2 添加为“可选”依赖项。

或者,您可以将project 克隆到两个单独的项目中,将所有代码删除到另一个模块,然后将该新模块添加为project-1project-2 的依赖项。坦率地说,这更像是一个代码结构和重构问题,而不是一个实际的 Maven 问题。

(而且,理论上,Stephen C 是对的)。

【讨论】:

  • 谢谢。我会考虑其他断言的强制插件。至于这个问题,我认为这太过分了,因为我只想确保我正在使用一组依赖项进行构建。顺便说一句,如果“模块”是单独的项目,我认为我可以通过禁止的依赖项(exclude module-*, include module-${module})强制执行规则,但如果模块属于同一个项目,那将不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 2017-09-03
  • 2011-11-07
  • 2014-11-17
  • 1970-01-01
  • 2022-10-04
相关资源
最近更新 更多