7

我一直在浏览 Ivy 文档,并且ivysettings.xml对 ivy.jar 中的默认设置有疑问。

我要做的就是将公共存储库更改为我们拥有的本地 Maven 存储库。就是这样。我可以将所有ivysettings*.xml文件复制到我的项目中,并使用<ivy:settings>来指向它,但这会重复很多东西。我也可以修改ivy.jar,但这增加了维护的麻烦。开发者必须使用我的ivy.jar,如果我们去一个新版本,我必须再次修改它。

那么,如何保留所有标准的 Ivy 设置并简单地切换存储库以使用?我只是想将我的更改覆盖到 Ivy 已经拥有的内容上。


还有两个问题:

  • ivyconf*.xml文件和文件有什么区别ivysettings*.xml?为什么常春藤中有重复的配置?
  • 什么是关于常春藤的好书?我现在正在使用 Manning 的Ant in Action,它以某种概括的方式涵盖了 Ivy,并且有点过时了。常春藤网站本身的资源很糟糕。
4

3 回答 3

6

那是我的 ivysettings.xml 文件

<ivysettings>
    <include url="${ivy.default.settings.dir}/ivysettings.xml"/>
    <resolvers>
        <chain name="download-chain" changingPattern=".*" checkmodified="true" >
            <ibiblio name="maven" m2compatible="true" />
        </chain>
    </resolvers>
</ivysettings>

请注意,我在这里编写了额外的解析器,但使用了标准解析器中的所有其他解析器,这在 url 中指示。这将从 ivy.jar 文件中的 ivysettings.xml 加载设置。

至于 ivyconf*.xml。我认为它现在已被弃用。Ivysettings 是这样做的新方法。

资源实在是太惨了。我完全同意这一点。但是,stackoverflow.com 中的许多答案都足够冗长,并且实际上试图预测问题

Mark O'Connor 的回答特别冗长,直截了当。你必须接受这样一个事实,即你正在学习新东西,只要给它时间。

于 2012-07-13T20:12:12.310 回答
1

终于想通了。

我从 jar 中复制了 ivysettings.xml 文件并稍作修改。请注意,第一个包含指向常春藤中的 XML 文件,${ivy.lib.dir}而不是指向${ivy.default.settings.dir}

<ivysettings>
<settings defaultResolver="default"/>
    <include file="${ivy.lib.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"/>
</ivysettings>

我有我自己的ivysettings-public.xml,它与默认值相同,但现在定义了一个root到我的存储库。(是的,它现在是 localhost,但是一旦我解决了所有问题,我会将其设置为实际服务器):

<ivysettings>
    <resolvers>
        <ibiblio name="public" m2compatible="true" 
              root="http://localhost:8081/artifactory/repo" />
    </resolvers>
</ivysettings>

现在,在我的 中build.xml,我有以下内容:

<property name="ivy.lib.dir"        value="${basedir}/ivy.lib"/>

<taskdef uri="ivylib:org.apache.ivy.ant"
    resource="org/apache/ivy/ant/antlib.xml">
    <classpath>
        <fileset dir="${ivy.lib.dir}">
            <include name="ivy.jar"/>
            <include name="ivy-*.jar"/>
        </fileset>
    </classpath>
</taskdef>

<ivy:configure file="${ivy.lib.dir}/ivysettings.xml" override="true"/>

这似乎可以解决问题。

于 2012-07-13T20:17:52.997 回答
0

在您的 build.xml 中包括以下内容:

<property name="ivy.settings.dir" value="PATH OF SETTINGS" />
<property file="${ivy.settings.dir}/ivysettings.properties" />
<ivy:settings file="${ivy.settings.dir}/ivysettings.xml" />
于 2013-01-11T03:09:02.070 回答