Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven:解析重复依赖项_Java_Maven - Fatal编程技术网

Java Maven:解析重复依赖项

Java Maven:解析重复依赖项,java,maven,Java,Maven,我正在开发一个将在我们公司内部使用的应用程序。为了让它与我们的其他内部系统进行互操作,我必须使用一些我们内部使用的maven依赖项,但这会导致使用一些我也需要的外部第三方依赖项时出现一些问题 所以我的pom基本上是这样的: <dependencies> <dependency> internal-framework-artifact </dependency> <dependency> ne

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

所以我的pom基本上是这样的:

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

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

内部框架伪影
必要的第三方工件
我发现这两个依赖项都将apache的
commons集合
作为它们自己的依赖项之一(在许多其他依赖项中,但为了这个问题的简单性,我们将其保持为一)

如果我为
commons collections
pom将排除规则放在它们两个上,我可以编译该项目,但生成的jar将无法访问
commons collections
的任何一个版本,并且只会导致
java.lang.NoClassDefFoundError
异常。删除其中任何一个上的排除规则只会导致mvn编译器错误:

[警告]规则2:org.apache.maven.plugins.enforcer.BandUpplicateClasses失败,消息为: 发现重复类:


我一直在看各种各样的问答,似乎找不到与我的情况100%相关的东西。我真的不知道如何解决这个问题。我是否遗漏了一些非常明显的东西?

我从来没有实际使用过
maven shade插件来进行着色,但我认为这正是它设计的用途

创建一个新项目,该项目使用
maven shade插件
(请参阅:)生成
内部框架工件
的uber jar版本,其中包含
内部框架工件
中的类及其所有依赖项。配置插件,使其将所有与
必要的第三方工件
相关的类重新定位到一些不冲突的包名。这个新项目应该生成一个具有不同名称的.jar,类似于具有依赖项的
内部框架工件


现在修改您的原始pom,使其依赖于具有依赖关系的
内部框架工件
,并且应该可以工作。

如我所述,仅将其从其中一个中排除会导致上面引用的maven错误。我不知道为什么,也不知道该怎么办;这正是我问题的重点。我建议您这样做
mvn dependency:tree-Doutput=/path/to/file
,并检查结果。您是否尝试过这两种方法的排除,以及您自己对commons集合的依赖?这将编译并使您的jar保持愉快。如果这会产生运行时错误,您可能需要升级一个或另一个框架。警告不是mvn编译器错误。这是一个mvn enforcer错误,与此略有不同。mvn enforcer:enforce with-X是否显示任何关于在何处找到重复类的提示?否则,请按照@BevynQ的建议查看完整的依赖关系树