java - 分组*提供*依赖项的最佳方式

标签 java maven

我们有一个多模块 POM,它也作为所有涉及的子模块的父 POM。称它为 MultiModulePOM。我们有大约 70 个模块,比如编号为 Module1Module70

现在:这些模块中的前 30 个在编译时需要一组 JAR 文件。即 - scope=provided。由于我们讨论的是一组 JAR 文件,因此让这 30 个模块保持同步非常乏味,而且一般来说,我不太喜欢复制定义。

于是,我陷入了dependency grouping的陷阱.似乎是个好主意,但它不适用于 provided 依赖项。换句话说:如果我将依赖的 JAR 分组在一个名为 ExtDependencies 的模块中,并使 Module1 依赖于 ExtDependencies,则由ExtDependencies 不会被传递添加到 Module1,因为它们的范围是提供的

(如果最后一段不正确,请告诉我,因为它真的可以让我摆脱困境)

我能看到的唯一其他选项是创建一个名为(例如)IntermediaryPOM 的父 POM。 IntermediaryPOM 扩展了 MultiModulePOM 并使用 scope=provided 征集依赖 JAR 文件集。模块 Module1-Module30 然后扩展 IntermediaryPOM

这似乎可以解决问题,但我遇到了三个问题:

  1. 它添加了我不确定是否真的需要的另一层 POM。
  2. 后来,在分发期间,我发现自己还必须安装/部署中间 POM。
  3. 考虑一般情况:中间 POM 可能有其他兄弟用于其他 JAR 集(用于模块 31-50)。因此,此解决方案似乎无法很好地扩展。

所以我的问题是 - 根据您的经验,处理此问题的最佳方法是什么?这种用例有什么已知的最佳做法吗?

最佳答案

恐怕这里没有简单的解决方案。

你说得对,如果你在 ExtDependencies 中声明公共(public)依赖项作为provided它们不会被添加到依赖于 ExtDependencies 的任何其他模块的类路径中.就是这样provided有效。

但是你可以在没有范围的情况下声明这些常见的依赖关系(例如使用默认的 compile 范围)并添加 provided依赖 ExtDependencies .在这种情况下,所有 ExtDependencies依赖项添加到类路径中。天哪,那是很多“依赖” :)

您还提到了其他可能的选择——引入另一个抽象级别(您可能知道,这是解决几乎所有问题的一种方法)。但是这样的多级层次结构不太优雅,也更难维护(我在我们的项目中有它,所以我一直在)。

一般来说,我还没有遇到过如此规模的问题,但如果我要解决它,我会选择第一个选项,同时考虑范围界定建议。

关于java - 分组*提供*依赖项的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757198/

相关文章:

maven - 如何在Intellij Gradle项目中下载Griffon发行版?

git - 克隆一个 github 存储库,进行更改,然后将除其中一项更改外的所有更改推回

java - 在 Eclipse 中使用 Maven 就地提供资源

java - 准备好的声明有问题

java - ISO-8859-1编码和二进制数据保存

Java 密码检查器

java - 如何使用 EJB 实体 bean 连接到 mysql 数据库?

maven - Tycho 解决了我自己的 list 优先 Artifact 的错误版本

java - 错误: Could not find or load main class Mainclass

java - 由于 java.lang.NoClassDefFoundError : com/fasterxml/jackson/annotation/JsonMerge 无法运行代码