【问题标题】:ivysettings.xml: Can I "modify" the default settings without modifying the jar or completely replacing them?ivysettings.xml:我可以在不修改 jar 或完全替换它们的情况下“修改”默认设置吗?
【发布时间】:2012-07-13 13:35:30
【问题描述】:

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

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

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


还有两个问题:

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

【问题讨论】:

    标签: ivy


    【解决方案1】:

    这是我的 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 的回答特别冗长,直截了当。你必须接受这样一个事实,即你正在学习新东西,只要给它时间。

    【讨论】:

    • 我知道我需要时间来学习它,但即使是最基本的也没有得到很好的解释。这将是有人会问的第一个问题,如果他们'
    • 我做对了吗: 指向 jar 中的 ivysettings.xml?因为我从未设置变量 ivy.default.settings.url 并且我的文件系统上也没有 ivysettings.xml。
    • 那是很久以前的事了,但是用 -d 或 -v 运行 ant 应该会显示很多信息,包括变量和属性的值
    【解决方案2】:

    终于明白了。

    我从 jar 中复制了 ivysettings.xml 文件并稍作修改。请注意,第一个 include 指向 ivy ${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"/>
    

    这似乎可以解决问题。

    【讨论】:

    • 您不应该复制通常的 ivysettings.xml。您可以执行我在回答中写的 。然后做你该做的。我不得不说。这些基础知识包含在 apach-ivy 可下载 src 中的示例中。
    【解决方案3】:

    在您的 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" />
    

    【讨论】:

      猜你喜欢
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      相关资源
      最近更新 更多