2012-12-06 259 views
0

有两个项目:
A ----有一个lib commons vers。 1.3.7 ---(取决于B)
B ----有lib commons vers。 1.2.5依赖版本冲突maven

所以,我们正在建设项目B,lib commons vers。 1.2.5将被包含并安装在本地存储库中,然后...如果我们执行构建的A(依赖于B),Maven将决定lib commons vers。 1.3.7必须包括在内,因为lib距离树根的距离最小...... 我知道如果我们将工件的版本设置为:1.2.5-这是推荐的版本。但是如果我们把它放在[]中 - 这是一个很难的要求,maven应该应用另一个策略来解决版本冲突 - 以包含该工件的推荐版本。但是当我尝试这样做的时候,它并没有起作用,因为Maven会从loc库获取工件,其中包含对lib commons vers的引用。 1.2.5在清单文件中,但包含lib - commons vers。 1.3.7。你能否告诉我该如何解决这个问题,或者在列表中可能有一些工具或者maven插件可以告诉你这样的问题。

回答

1

您需要的依赖使用排除。类似的东西(它只是一个样本):

<dependency> 
<groupId>org.springframework.integration</groupId> 
<artifactId>spring-integration-amqp</artifactId> 
<version>2.1.0.RELEASE</version> 
<exclusions> 
    <exclusion> 
     <artifactId>spring-beans</artifactId> 
     <groupId>org.springframework</groupId> 
    </exclusion> 
</exclusions> 
</dependency> 

如果您使用的是Eclipse,不想做手工,你可以打开一个POM文件并选择“依赖层次结构”选项卡做在其下您可以看到所有的依赖关系层次结构。然后,你可以右键单击你想排除的依赖关系,然后点击'排除Maven神器'

+0

@jonasas,你的意思是说,在项目的构建过程中,项目B将包含没有公共库?但这不是一个解决方案。实际上项目A对项目B一无所知,maven只提供B.jar和commons vers。 1.2.5在MANIFEST文件中,但由于“最接近胜利”策略Maven决定lib commons vers。应该包括1.3.7。那就是问题 – gizzy

+0

如果你不想使用1.3.7版本,并且想要使用库的依赖项目的版本(1.2.5),你不能直接从项目A中删除直接依赖项吗? – jonasnas

0

你需要运行mvn dependency:tree