2

我有一个 Maven 项目多模块项目。一些模块为其他模块生成的库创建自定义打包。正在使用的包装有自己的一套版本化依赖项,我需要很好地使用它们。

例如:我的父 POM 可能有一个条目,例如commons-codec:commons-codec 1.4,我的“core-lib”POM 将其作为依赖项包含(无显式版本),并且我想确保我的打包模块捆绑在正确的版本中。但是,我使用的特定类型的自定义打包也需要例如log4j:log4j 1.2.15,并且我想确保当我的打包模块运行时,它还捆绑了正确的 log4j 版本。

这是皱纹:我正在为“制作{自定义包装}的项目”工作的示例POM使用自定义包装团队提供的父级。如果我使用他们的父母,我会丢失commons-codec. 如果我使用我的父母,我会丢失log4j.

现在,通常如果我问“我如何使 A 和 B 依赖于相同的版本”,您会回答“使 A 和 B 具有相同的父级,并dependencyManagement在父级中包含一个部分”。我的问题是,我需要 A、B 和 C 依赖同一个版本,但我对 C 没有任何控制权。

认为这就是 Maven“mixins”要解决的问题,但当然它们还不存在。与此同时,我一直在做的是选择一个父母,然后dependencyManagement从另一个 POM 复制并粘贴该部分,并附上一条评论说“确保你保持最新”。显然,这是一个丑陋,丑陋的黑客,但我还没有找到另一种与双方保持同步的方法。

4

3 回答 3

0

使用组装插件来打包您的工件及其所有依赖项并让您的打包模块在其上运行怎么样?那么你就没有尝试任何 pom 魔法。像往常一样,这只是一个项目使用另一个项目的工件的问题。

于 2011-09-29T02:12:31.010 回答
0

现在,我将接受“这是关于 Maven 的真正糟糕的事情之一”的答案。也许这个问题可以在 Maven 3.1 最终启动时得到更新。

于 2011-10-11T21:07:31.923 回答
0

您是否不能激活多个配置文件,这些配置文件在启用时具有自己的依赖项部分拉入所需的库。由于可以激活配置文件的方式,这提供了一些很好的灵活性。

于 2012-01-11T10:56:23.280 回答