Ivy无法下载位于本地Maven repostiory中的工件的依赖项

时间:2016-01-13 12:00:08

标签: ivy

我在本地Maven存储库中安装了工件A.

工件A有许多依赖关系 - 在其pom中正确指定。

如果我将A设置为Maven项目中的依赖项,一切正常 - A及其依赖项都已正确下载。这告诉我A已正确安装在本地Maven仓库中,并且已正确指定其依赖关系。

我还有一个Ant / Ivy项目。我已按以下方式配置了ivysettings.xml(遵循另一个答案的建议):

<ivysettings>
    <settings defaultResolver="default"/>
    <property name="m2-pattern" value="${user.home}/.m2/repository/[organisation]/[module]/[revision]/[module]-[revision](-[classifier]).[ext]"     override="false" />
    <resolvers>
        <chain name="default">
            <filesystem name="local-maven2" m2compatible="true" >
                <artifact pattern="${m2-pattern}"/>
                <ivy pattern="${m2-pattern}"/>
            </filesystem>
            <ibiblio name="central" m2compatible="true"/>
        </chain>
    </resolvers>
</ivysettings>

使用此配置,Ivy正确下载A,但不是它的依赖项(似乎完全忽略了它的pom文件)。

我应该如何以这种方式更改我的设置依赖项也将被下载?

3 个答案:

答案 0 :(得分:0)

Maven和ivy存储库有不同的格式。简单地说,Maven使用POM文件,而常春藤则使用常春藤文件。

好消息是常春藤有一个特殊的iniblio解析器,旨在了解Maven存储库的格式。坏消息是,它确实假设这样的存储库是远程运行的,例如使用NexusArtifactoryAchiva等软件。

例如:

<ivysettings>
    <settings defaultResolver="repos" />
    <resolvers>
        <chain name="repos">
            <ibiblio name="central" m2compatible="true"/>   
            <ibiblio name="my-releases" m2compatible="true" root="https://myhost/releases"/>   
        </chain>
    </resolvers>
</ivysettings>

演示如何从Maven central和本地运行的Maven存储库中提取依赖关系

总之,在本地运行Maven存储库并不难,也是在各种构建技术之间共享工件的最佳方式:Maven,ANT / ivy,Gradle,SBT等。

答案 1 :(得分:0)

虽然Mark O&Connor的答案是一个正确的答案和解决问题的合理方法,但我设法找到了一个不同的解决方案,这意味着在设置方面的开销较小。

因此,我通过Ant任务ivy:convertpom将工件A的POM转换为常春藤文件。请注意,与POM标准相反,Ivy文件的名称应如下所示:ivy-<your lib revision>.xml

然后,我刚刚配置了一个本地 Ivy 存储库,指向工件A及其常春藤文件所在的文件夹,例如:

<ivysettings>
    <property name="my-local-ivy-dependencies-jars.repository" value="${user.dir}\..\my-local-ivy-dependencies-jars/lib"/>
    <property name="my-local-ivy-dependencies-jars.pattern" value="${my-local-ivy-dependencies-jars.repository}/[organisation]/jars/[artifact]-[    revision].[ext]"/>
    <settings defaultResolver="default"/>
    <resolvers>
        <chain name="default">
            <filesystem name="my-local-ivy-dependencies-jars">
                <ivy pattern="${my-local-ivy-dependencies-jars.pattern}" />
                <artifact pattern="${my-local-ivy-dependencies-jars.pattern}" />
            </filesystem>
            <ibiblio name="central" m2compatible="true"/>
        </chain>
    </resolvers>
</ivysettings>

答案 2 :(得分:0)

为了补充Mark O&#39; Connor的答案,您实际上可以使用file://方案的本地网址。以下适用于Windows(请注意方案后的三次斜杠):

<ivysettings>
    <settings defaultResolver="local-maven" />
    <resolvers>
        <ibiblio name="local-maven" m2compatible="true" 
            root="file:///c:/path/to/maven/repo"
            pattern="[orgPath]/[module]/[revision]/[artifact]-[revision].[type]"/>
    </resolvers>
</ivysettings>

我对此的使用是在使用常春藤的ant构建中检索android sdk依赖项。