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 中。

我怀疑它与 &lt;profile&gt; 依赖项中的这种依赖关系有关,而不是在文件本身中列出。我想知道是否有办法让 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 没有正确解析它。我找不到向 Apache Ivy 团队记录问题的方法,但我肯定愿意。

以上是关于Ivy 没有下载对 Jar 的二级依赖的主要内容,如果未能解决你的问题,请参考以下文章

我们可以使用单独的解析器在 ivy ANT 中下载依赖项 jar 吗?

从 Ivy.xml 下载依赖项

如何使用不同的分类器在 Ivy 中下载多个 Maven 依赖项?

Apache Ivy:解决嵌入在安装程序中的依赖项

Apache Ivy 排除依赖项的标记

常春藤不使用分类器拉动对 jar 的传递依赖