使用公共的Maven仓库和Ivy

39

我有一个包含ivy.xml的文件。

<dependencies>
  <dependency org="commons-lang" name="commons-lang" rev="2.4"/>
  <dependency org="foo-bar" name="superwidgets" rev="1.5"/>
</dependencies>
整个 SuperWidget 的东西都托管在一个 Maven 仓库中:http://example.com/m2/。Ivy 文档提到了 resolver,但它似乎假定了一个 Ivy 仓库。我该如何将单个非官方的 Maven 仓库添加到我的 Ivy 设置中,仅供单个模块使用?(换句话说,在 Ivy 中对应于 Maven 的 <repository> 标签的是什么?)没什么花哨的东西,所以我希望在我的 ivy.xml 中只有一行代码。
3个回答

52

您需要添加一个 ivysettings.xml 文件,并在其中列出以下存储库(在通用术语中称为解析器

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

我是新手,尝试使用<ibiblio name="tmatesoft-releases" m2compatible="true" root="http://maven.tmatesoft.com/content/repositories/releases/"/>,但出现了“未知解析器main”和“未知解析器public”的错误。 - Jonathan

7

我更喜欢使用包含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>

虽然我不直接使用它们,但我更喜欢创建和控制自己的本地Ivy存储库。

(创建本地存储库指南)

0

这里有一个尝试保持 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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接