Ivy 没有下载对 Jar 的二级依赖
Posted
技术标签:
【中文标题】Ivy 没有下载对 Jar 的二级依赖【英文标题】:Ivy not downloading secondary dependency on Jar 【发布时间】:2015-05-29 13:52:54 【问题描述】:我们在 Ivy 和 Maven 之间遇到了一点传递问题:
我们有一个名为ivylib
的项目。 Ivylib
是一个 Ant/Ivy 项目,它依赖于另一个名为 mvnlib
的项目。
Mvnlib 依赖于另一个名为 jersey-client
的项目。这又取决于jersey-core
。这两个都是 com.sun.jersey
groupId
的一部分。
在 Mvnlib pom.xml
文件中,我们有以下依赖:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19</version>
查看jersey-client
项目,我在其pom.xml
文件中看到以下依赖项:
<profiles>
....
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>$project.version</version>
</dependency>
</dependencies>
</profile>
</profiles>
在Ivylib项目的ivy.xml
文件中,我们有如下依赖:
<dependency org="com.travelclick" name="ivylib"
rev="2.1" conf="compile->default"/>
除了jersey-core
jar 的二级依赖外,所有Mvnlib 的依赖都被下载并包含在Ivylib 中。
我怀疑它与 <profile>
依赖项中的这种依赖关系有关,而不是在文件本身中列出。我想知道是否有办法让 core jar 下载。
目前,我们只是在 Mvnlib 项目中包含 jersey-core
jar,但我想知道是否还有其他方法。
【问题讨论】:
【参考方案1】:最好的办法是检查您的缓存位置以进行 IVY 解析。查看 jersey-client 的依赖项列表后,我注意到“jersey-core”不是其中之一。请参阅下面从 POM 生成的 ivy-1.19.xml 文件:
<dependencies>
<dependency org="junit" name="junit" rev="4.8.2" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="com.sun.net.httpserver" name="http" rev="20070405" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="org.osgi" name="osgi_R4_core" rev="1.0" force="true" conf="provided->compile(*),provided(*),runtime(*),master(*)"/>
...
</dependencies>
我只想在我的 Ivy 文件中添加另一个依赖项。复制/粘贴“jersey-cleint”依赖行并更改为“jersey-core”。如果 POM 正确列出了“jersey-core”,那就太好了,不是吗? :-)
【讨论】:
这就是我最终所做的。我的问题是为什么在我们的 Maven 项目中下载依赖项,而不是 Ivy 项目。我可以看到 jersey-core 是一个依赖项,通常 Ivy 会下载所有依赖项,但这次没有。 很抱歉我不能给出具体的答案。查看 POM 规范,您可以将以上是关于Ivy 没有下载对 Jar 的二级依赖的主要内容,如果未能解决你的问题,请参考以下文章
我们可以使用单独的解析器在 ivy ANT 中下载依赖项 jar 吗?