将公共 maven 存储库与 ivy 一起使用

Posted

技术标签:

【中文标题】将公共 maven 存储库与 ivy 一起使用【英文标题】:Use public maven repository with ivy 【发布时间】:2011-06-17 16:27:44 【问题描述】:

我有一个ivy.xml 包含

<dependencies>
  <dependency org="commons-lang" name="commons-lang" rev="2.4"/>
  <dependency org="foo-bar" name="superwidgets" rev="1.5"/>
</dependencies>

整个超级小部件都托管在一个 maven 存储库中,地址为 http://example.com/m2/。常春藤文档mentions resolvers,但它似乎假设一个常春藤存储库。如何将单个非官方 maven 存储库添加到我的 ivy 设置中以仅由单个模块使用? (或者换一种说法,什么对应于常春藤中 maven 的 &lt;repository&gt; 标签?)没什么特别的,所以我希望在我的 ivy.xml 中有一个单行。

【问题讨论】:

【参考方案1】:

您需要添加一个 ivysettings.xml 文件,其中列出了以下存储库(resolvers in ivy speak)

<ivysettings>
    <settings defaultResolver="chain"/>
    <resolvers>
        <chain name="chain">
            <ibiblio name="central" m2compatible="true"/>
            <ibiblio name="example" m2compatible="true" root="http://example.com/m2/"/>
        </chain>
    </resolvers>
</ivysettings>

在我看来,将依赖声明 (ivy.xml) 与检索机制 (settings.xml) 分开会更有意义。这在 Maven 中是不需要的,因为它只支持一种类型的存储库。

如果你想变得非常花哨,你可以控制哪个存储库为特定模块提供服务:

<ivysettings>
    <settings defaultResolver="central"/>
    <resolvers>
        <ibiblio name="central" m2compatible="true"/>
        <ibiblio name="example" m2compatible="true" root="http://example.com/m2/"/>
    </resolvers>
    <modules>
        <module organisation="foo-bar" name="superwidgets" resolver="example"/>
    </modules>
</ivysettings>

【讨论】:

我是新手,尝试使用&lt;ibiblio name="tmatesoft-releases" m2compatible="true" root="http://maven.tmatesoft.com/content/repositories/releases/"/&gt; 并得到unknown resolver mainunknown resolver public【参考方案2】:

我更喜欢包含 SpringSource 的 EBR 和 Maven Central 的链式解析器,如下所示:

<ivysettings>
    <settings defaultResolver="spring-chain" />
    <resolvers>
        <chain name="spring-chain">
            <url name="com.springsource.repository.bundles.release">
                <ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
                <artifact pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
            </url>
            <url name="com.springsource.repository.bundles.external">
                <ivy pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
                <artifact pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
            </url>
            <ibiblio name="ibiblio" m2compatible="true"/>
        </chain>
    </resolvers>
</ivysettings>

虽然我不直接使用,但我更喜欢create and control my own local Ivy repository。

【讨论】:

【参考方案3】:

这是一个尝试保留 Ivy 的默认行为并仅添加到存储库的 maven.tmatesoft.com 存储库

<ivysettings>
    <settings defaultResolver="default"/>

    <!-- These "magic lines" are pulled from: https://ant.apache.org/ivy/history/latest-milestone/tutorial/defaultconf.html -->
    <include url="$ivy.default.settings.dir/ivysettings-public.xml"/>
    <include url="$ivy.default.settings.dir/ivysettings-shared.xml"/>
    <include url="$ivy.default.settings.dir/ivysettings-local.xml"/>
    <include url="$ivy.default.settings.dir/ivysettings-main-chain.xml"/>
    <include url="$ivy.default.settings.dir/ivysettings-default-chain.xml"/>
    <resolvers>
        <!-- Custom Repos here -->
        <ibiblio name="tmatesoft" m2compatible="true" root="https://maven.tmatesoft.com/content/repositories/releases/"/>
        <!--<filesystem name="internal">-->
            <!--<ivy pattern="$repository.dir/[module]/ivy-[revision].xml"/>-->
            <!--<artifact pattern="$repository.dir/[module]/[artifact]-[revision].[ext]"/>-->
        <!--</filesystem>-->
    </resolvers>
    <chain name="default" returnFirst="true" checkmodified="true" changingPattern=".*SNAPSHOT">
        <!-- These two are magic lines from the default conf -->
        <resolver ref="local"/>
        <resolver ref="main" />

        <!-- Custom Repos here -->
        <resolver ref="tmatesoft" />
    </chain>
    <modules>
        <module organisation="org.tmatesoft.hg4j" name=".*" resolver="tmatesoft"/>
    </modules>
</ivysettings>

【讨论】:

以上是关于将公共 maven 存储库与 ivy 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在公共 Maven/Ivy 存储库中搜索特定类?

Android 将 github 库与 maven 一起使用是不是安全

使用 IVY 将 SNAPSHOT 工件发布到 Maven - 有啥魔力?

本地存储库的好常春藤教程? [关闭]

将 Gradle 与自定义 Ivy 存储库一起使用

如何将 ivy 本地存储库用作 maven 存储库