2015-01-08 74 views
0

项目A引用项目B.项目B包含本地依赖项。不幸的是,这个本地依赖项对版本1.5中的net.java.dev.designgridlayout有依赖性。排除不能传递的依赖项

我们想在项目A的版本1.11中使用net.java.dev.designgridlayout,但是我们无法“覆盖”依赖项。 Eclipse始终使用项目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更改为somethi ng不同,但由于某些原因,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"

回答

0

不知道 - 但是:

您的项目有一个依赖于本身?它不应该使用project-b吗?

它不是一个好主意,改变组或神器id的作为,因为maven不能再检测到它相同的神器。如果你做一个自定义版本,版本号应该足够了。

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

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

对于eclipse:它索引本地存储库。在maven设置中有一个重新索引按钮。所以如果你手动复制那些可能帮助日食找到神器的罐子。但是这种解决方法需要在每台机器上完成。我不会把这算作解决方案。在Maven世界中,工件解决是一个基础设施问题,不应该针对每个项目进行处理。这样做的方式应透明settings.xml

+0

ops,当然,我的意思是项目-B;) –

+0

好吧:) - 您在项目-A中的依赖关系是“designgridlayout”? maven为此展示了什么版本?它从哪里来? – wemu