1

我有同一个 jar 的两个版本(3.2 和 2.2.1)我需要同时使用它们,但 ivy 会驱逐旧版本。如何配置ivy取两个版本?

    <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>
4

1 回答 1

2

您需要使用常春藤配置。这是一种非常灵活的机制来管理任意组的依赖关系。

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

例子

常春藤.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>

笔记:

  • Maven Central 中不存在版本 2.2.1
  • 注意配置映射“??? -> master”。在 Maven 中,远程配置映射解析为没有依赖关系的主模块工件。(

构建.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>

笔记:

  • 生成常春藤报告总是一个好主意。它会告诉你哪些依赖项存在于哪个 ivy 配置上。
  • 此示例显示了 ivy 管理 ANT 路径。在组装 webapp WAR 文件之类的文件时,您还可以使用 ivy 配置和 ivy 检索任务来填充本地“lib”目录。
于 2012-09-10T17:56:05.923 回答