ivysettings.xml:我可以“修改”默认设置而无需修改jar或完全替换它们吗?

时间:2012-07-13 16:55:35

标签: ivy

我一直在阅读常春藤文档,我对ivy.jar中找到的默认ivysettings.xml有疑问。

我想要做的就是将公共存储库更改为我们拥有的本地Maven存储库。而已。我可以将所有ivysettings*.xml文件复制到我的项目中,并使用<ivy:settings>指向它,但这复制了很多东西。我也可以修改ivy.jar,但这会增加维护难题。开发人员必须使用我的ivy.jar,如果我们转到新版本,我将不得不再次修改它。

那么,如何保留所有标准常春藤设置并简单地切换存储库以使用?我只是想重叠我对Ivy已经拥有的更改。


还有两个问题:

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

3 个答案:

答案 0 :(得分: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>

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

关于ivyconf * .xml。我认为现在已经弃用了。 Ivysettings是实现这一目标的新方法。

资源非常糟糕。我完全赞同这一点。但是,stackoverflow.com中的很多答案都很冗长,实际上是试图预测问题

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

答案 1 :(得分:1)

终于明白了。

我从jar中复制了ivysettings.xml文件并稍作修改。请注意,第一个包含指向常春藤${ivy.lib.dir}中的XML文件,而不指向${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"/>

这似乎可以解决问题。

答案 2 :(得分: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" />