2013-10-15 96 views
0

我正在将一些遗留代码移植到新版本。一个特定的模块(slf4j),其中1.5x版本与1.6x和1.7x不兼容,我的问题是项目依赖的项目作为jar包含在classpath中。有没有办法解决这个问题?删除maven中的传递依赖项

+0

因此,您的项目取决于它本身依赖于1.5.x版本的SLF4J的东西?那是对的吗? – Vidya

+1

是的,我打算使用1.6x和1.7x版本,它不向后兼容1.5x。每次我发起战争(我正在处理的项目)时,它都会失败,因为由于不同版本的不兼容而存在不兼容性,因为传输依赖关系 – user1801279

回答

2

如果在POM Maven的直接依赖关系将会使用它,并省略任何传递依赖于同一工件,如这里

<dependency> 
    <groupId>org.apache.camel</groupId> 
    <artifactId>camel-core</artifactId> 
    <version>2.12.1</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.5</version> 
</dependency> 

骆驼核心具有传递性依赖SLF4J-API-1.6.6,但Maven会选择slf4j-api-1.7.5

+0

我不确定这是否正确,我尝试过新版本的slf4j添加到我的项目POM中。它仍然会导致兼容性问题。尽管这可能只适用于sl4j案件,但我不能肯定地说。 – user1801279

+0

在Eclipse中很容易验证go pom“dependency hierarchy”选项卡 –

+0

yep mvn依赖关系:树是我用来推断依赖关系仍然在偷偷摸摸的方式,即使我已经将新版本链接到我的项目 – user1801279

0

我解决我的问题的方法是重新部署我的项目所依赖的项目。既然它是一个jar,我不得不以maven格式重新创建它,并添加必要的排除语句来阻止该级别的所有传递依赖。这可能不是最佳做法,但在我的情况下工作。我想用更新版本的项目是所有基于maven的排除标签应该足够了