我应该如何从多个来源分享Maven DepdendencyManagement?

时间:2011-09-28 21:37:22

标签: maven multiple-inheritance dependency-management multi-module

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

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

这就是皱纹:我正在为“使{custom packaging}生成的项目”使用的示例POM使用由自定义打包团队提供的父级。如果我使用他们的父母,我会丢失commons-codec的版本信息。如果我使用我的父母,我会丢失log4j的版本信息。

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

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

3 个答案:

答案 0 :(得分:0)

如何使用assembly plugin将您的工件与其所有依赖项打包在一起并让您的打包模块运行呢?然后你没有尝试任何pom魔法。这只是一个项目的问题,使用来自另一个项目的工件,就像平常一样。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

启用时,是否可以激活多个配置文件,这些配置文件具有自己的依赖关系部分,可以拉入所需的库由于可以激活配置文件的方式,这允许一些很好的灵活性。