项目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"
答案 0 :(得分:0)
不确定 - 但是:
您的项目A是否依赖于自身?不应该使用project-b吗?
更改组或工件ID并不是一个好主意,因为maven无法再检测到相同的工件。如果您使用自定义版本,则版本号应该足够。
如果您在自己的pom中添加依赖项,那么您不需要排除工件,因为groupId和artifactId是相同的。你自己的pom中的版本将在项目-b中获胜。如果项目a再次定义了该依赖关系,那么该版本将获胜。
我会在项目上做一个mvn dependency:tree
- 一个pom来查看依赖项的来源。
对于eclipse:它为本地存储库编制索引。在maven设置中有一个重新索引按钮。因此,如果您手动复制那些可能有助于eclipse找到工件的罐子。但是这种解决方法需要在每台机器上完成。我不认为这是解决方案。在maven世界中,工件解析是基础设施问题,不应按项目处理。这样做的方式应该是通过settings.xml透明的