【问题标题】:Use public maven repository with ivy将公共 maven 存储库与 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 中有一个单行。

【问题讨论】:

    标签: maven-2 artifactory ivy


    【解决方案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>
      

      【讨论】:

        猜你喜欢
        • 2013-04-08
        • 2014-05-14
        • 2012-04-20
        • 2013-03-25
        • 2011-07-12
        • 2011-08-25
        • 2013-05-10
        • 2022-12-19
        相关资源
        最近更新 更多