如何对同一个罐子进行两次修改?

时间:2012-09-10 11:11:45

标签: ivy

我有两个版本的同一个jar(3.2和2.2.1)我需要同时使用它们,但是常春藤会逐出旧版本。如何配置常春藤以采用两个版本?

    <dependency org="asm" name="asm-all" rev="3.2">
      <artifact name="asm-all" type="jar"/>
    </dependency>

    <dependency org="asm" name="asm-all" rev="2.2.1">
    <artifact name="asm-all" type="jar"/>
    </dependency>

1 个答案:

答案 0 :(得分:2)

您需要使用ivy configurations。这是一种非常灵活的机制来管理任意依赖组。

下面的示例将jar的每个版本放在单独的配置中。稍后可以使用常春藤cachepath任务创建两个类路径。

实施例

的ivy.xml

<ivy-module version="2.0">
    <info organisation="com.myspotontheweb" module="demo"/>

    <configurations>
        <conf name="compile1" description="Required to compile application1"/>
        <conf name="compile2" description="Required to compile application2"/>
    </configurations>

    <dependencies>
        <!-- compile1 dependencies -->
        <dependency org="asm" name="asm-all" rev="3.2" conf="compile1->master"/>

        <!-- compile2 dependencies -->
        <dependency org="asm" name="asm-all" rev="2.2.3" conf="compile2->master"/>
    </dependencies>

</ivy-module>

备注:

  • 版本2.2.1 does not exist in Maven Central
  • 请注意配置映射“??? - &gt; master”。在Maven中,远程配置映射解析为主模块工件而没有依赖关系。 (See

的build.xml

<project name="demo" default="init" xmlns:ivy="antlib:org.apache.ivy.ant">

    <target name="init" description="Use ivy to resolve classpaths">
        <ivy:resolve/>

        <ivy:report todir='build/ivy' graph='false' xml='false'/>

        <ivy:cachepath pathid="compile1.path" conf="compile1"/>
        <ivy:cachepath pathid="compile2.path" conf="compile2"/>
    </target>

    <target name="clean" description="Clean built artifacts">
        <delete dir="build"/>
    </target>

    <target name="clean-all" depends="clean" description="Additionally purge ivy cache">
        <ivy:cleancache/>
    </target>

</project>

备注:

  • 生成常春藤报告总是一个好主意。它将告诉您哪些依赖项存在于哪个常春藤配置上。
  • 此示例显示常春藤管理ANT路径。您还可以将常春藤配置与常春藤检索任务一起使用,以便在组装类似webapp WAR文件的内容时填充本地“lib”目录。