Maven:解决重复的依赖关系

时间:2014-07-07 23:10:54

标签: java maven

我正在开发一个将在我们公司内部使用的应用程序。为了使它与我们的其他内部系统互操作,我必须使用我们在内部使用的一些maven依赖项,但这会导致使用我需要的一些外部第三方依赖项的一些问题。

基本上我的pom看起来像这样:

<dependencies>
    <dependency>
        internal-framework-artifact
    </dependency>

    <dependency>
        necessary-third-party-artifact
    </dependency>
</dependencies>

我发现这两个依赖项都将apache的commons-collections作为它们自己的依赖项之一(在众多其他依赖项中,但我们只是将它保持在一个以便这个问题的简单性)

如果我对commons-collections pom的两个放置排除规则我可以​​编译项目,但是我生成的jar将无法访问任何版本的commons-collections并且只会导致java.lang.NoClassDefFoundError例外。删除其中任何一个的排除规则只会导致mvn编译器错误:

  

[警告]规则2:org.apache.maven.plugins.enforcer.BanDuplicateClasses失败并显示消息:   找到重复的课程:

我一直在寻找各种各样的q / a,我似乎无法找到与我的情况100%相关的东西。我真的不知道如何解决这个问题。我错过了一些非常明显的东西吗?

1 个答案:

答案 0 :(得分:1)

我从未真正使用maven-shade-plugin进行着色,但我认为这是它的设计用例。

创建一个使用maven-shade-plugin的新项目(请参阅:http://maven.apache.org/plugins/maven-shade-plugin/)以生成internal-framework-artifact的超级jar版本,其中包含internal-framework-artifact及其所有类依赖。配置插件,以便将所有与necessary-third-party-artifact的依赖关系的类重定位到一些非冲突的包名称。这个新项目应该生成一个名称不同的.jar,例如internal-framework-artifact-with-dependencies

现在修改原始pom,使其取决于internal-framework-artifact-with-dependencies,它应该有效。