Java 删除maven中的可传递依赖项

Java 删除maven中的可传递依赖项,java,maven-2,slf4j,build-dependencies,Java,Maven 2,Slf4j,Build Dependencies,我正在将一些遗留代码移植到新版本。在一个特定的模块(slf4j)中,1.5x版本与1.6x和1.7x不兼容,我的问题是我的项目所依赖的项目作为jar包含在类路径中。有没有办法解决这样的问题 如果pom中存在直接依赖项,Maven将使用它并省略对同一工件的任何可传递依赖项,例如这里 <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</a

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

如果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>

org.apache.camel
驼芯
2.12.1
org.slf4j
slf4j api
1.7.5

camel core有一个可传递的依赖项slf4j-api-1.6.6,但Maven会选择slf4j-api-1.7.5,我解决问题的方法是重新部署我的项目所依赖的项目。因为它是一个jar,所以我必须以maven格式重新创建它,并添加必要的排除语句来停止该级别的所有可传递依赖项。这可能不是最好的做法,但在我的情况下是有效的。我想新版本的项目都是基于maven的exclude标记就足够了

,所以您的项目依赖于某种本身依赖于SLF4J的1.5.x版本的东西?是吗?是的,我计划使用1.6x和1.7x版本,它们与1.5x不向后兼容。每次我进行war(我正在工作的项目)时,它都会因为不兼容而失败,这种不兼容是由于使用了不同的版本,这是由于可传递的依赖关系。我不确定这是否正确,我尝试了同样的方法,将新版本的slf4j添加到我的项目POM中。它仍然会导致兼容性问题。虽然这可能只是针对sl4j的情况,但我不能肯定地说。在Eclipse中,很容易验证转到pom“dependency hierarchy”选项卡的mvn dependency:tree是我用来推断依赖项是如何潜入的,即使我已经将更新的版本链接到我的项目中