排除传递依赖不起作用

时间:2015-01-08 10:11:50

标签: maven maven-dependency-plugin

项目A引用项目B.项目B包含本地依赖项。遗憾的是,这个本地依赖项依赖于版本1.5中的net.java.dev.designgridlayout。

我们想在项目A的1.11版本中使用net.java.dev.designgridlayout但我们无法“覆盖”依赖项。 Eclipse总是使用Project B的依赖项。

我们已经尝试从本地依赖项中排除1.5版本,但它不起作用。 奇怪的是,Eclipse成功解析了一个已经添加了1.11版的类。但是,对于已经存在的类,eclipse会从de.someCompany的传递依赖中解析它。

项目B:

<dependencies> <dependency> <groupId>de.someCompany</groupId> <artifactId>fs-client</artifactId> <version>5.1.209</version> <exclusions> <exclusion> <groupId>net.java.dev.designgridlayout</groupId> <artifactId>designgridlayout</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>net.java.dev.designgridlayout</groupId> <artifactId>designgridlayout</artifactId> <version>1.11</version> </dependency> </dependencies>

项目A:

<dependencies> <dependency> <groupId>Project-B</groupId> <artifactId>Project-B</artifactId> <version>1503.01</version> </dependency> </dependencies>

我还尝试在项目A中包含1.11依赖项。

我们甚至尝试在本地依赖项中安装DesignGridLayout V. 1.11,并将groupID和artifactId更改为不同的东西,但Eclipse出于某种原因甚至无法找到它。如果可以将DesignGridLayout包含在另一个groupId和artifactId中,我认为它会起作用。

mvn install:install-file -Dfile=lib\designgridlayout.jar -DgroupId=com.company.designgridlayout -DartifactId=design-grid-layout -Dversion=1.11 -DgeneratePom=true -Dpackaging=jar -DlocalRepositoryPath="%USERPROFILE%\.m2\repository"

1 个答案:

答案 0 :(得分:0)

不确定 - 但是:

您的项目A是否依赖于自身?不应该使用project-b吗?

更改组或工件ID并不是一个好主意,因为maven无法再检测到相同的工件。如果您使用自定义版本,则版本号应该足够。

如果您在自己的pom中添加依赖项,那么您不需要排除工件,因为groupId和artifactId是相同的。你自己的pom中的版本将在项目-b中获胜。如果项目a再次定义了该依赖关系,那么该版本将获胜。

我会在项目上做一个mvn dependency:tree - 一个pom来查看依赖项的来源。

对于eclipse:它为本地存储库编制索引。在maven设置中有一个重新索引按钮。因此,如果您手动复制那些可能有助于eclipse找到工件的罐子。但是这种解决方法需要在每台机器上完成。我不认为这是解决方案。在maven世界中,工件解析是基础设施问题,不应按项目处理。这样做的方式应该是通过settings.xml透明的

相关问题