代码之家  ›  专栏  ›  技术社区  ›  Craig P. Motlin

获取Ivy:检索以不将JAR复制到两个配置中?

  •  0
  • Craig P. Motlin  · 技术社区  · 15 年前

    我正在尝试设置我的Ant构建,以便运行ivy函数的目标与持续构建和大多数开发人员运行的目标完全分离。我希望有一个目标下载更新的依赖项,我将签入它。其他目标将通过从相关目录中包含*.jar来设置其类路径。

    我有两种配置:

    <configurations>
        <conf name="compile" />
        <conf name="test" />
    </configurations>
    

    我有一些依赖性:

    <dependency
        org="my.org"
        name="some-lib"
        rev="latest.release"
        conf="compile->default" />
    <dependency
        org="my.org"
        name="some-test-lib"
        rev="latest.release"
        conf="test->default" />
    

    我使用ivy:retrieve下载这些依赖项及其传递依赖项:

    <ivy:retrieve
        pattern="lib/[conf]/[type]/[artifact]-[revision].[ext]"
        sync="true"
        file="ivy.xml" />
    

    问题是,我看到编译目录和测试目录之间有一些重复的JAR,它们来自可传递的依赖项。因为我想签入所有这些jar并使用它们来创建类路径,所以我想避免重复。这有可能吗?

    lib/compile/jar/some-lib-1.0.jar
    lib/编译/jar/ slf4j-api-1.5.11.罐
    lib/test/jar/some-test-lib-1.0.jar
    lib/test/jar/junit-4.7.jar版本
    LIB/Test/JAR/ slf4j-api-1.5.11.罐

    3 回复  |  直到 15 年前
        1
  •  3
  •   Mark O'Connor    15 年前

    这不是重复,每个配置都是一组单独的jar和ivy 克制 任务是忠实地创建每一个集合…

    也许直接创建类路径比填充本地路径更有意义 国际清算银行 目录。

    下面是我的Ant构建文件的一个片段:

    <target name="get-dependencies">
        <ivy:resolve/>
    
        <ivy:cachepath pathid="compile.path" conf="compile" />
        <ivy:cachepath pathid="test.path" conf="test" />
    </target>
    
    <target name="compile" depends="get-dependencies">
        <javac srcdir="src" destdir="build/classes" classpathref="compile.path"/>
    </target>
    

    我通常只用常春藤 检索 任务当我需要创建一组JAR的本地副本时,例如组装Web应用程序的目录:

    <ivy:retrieve pattern="build/WEB_INF/lib/[artifact].[ext]" conf="runtime"/>
    

    更新

    另一种选择是指示Ivy在下载临时依赖项时排除SLF4J模块,如下所示:

    <dependency org="my.org" name="some-lib" rev="latest.release" conf="compile->default">
        <exclude module="slf4j-api"/> 
    </dependency>
    
    <dependency org="my.org" name="some-test-lib" rev="latest.release" conf="test->default">
        <exclude module="slf4j-api"/> 
    </dependency>
    
        2
  •  0
  •   Community Mohan Dere    8 年前

    如果我能直接通过常春藤做到这一点,那就最好了。现在我已经解决了这个问题 deleting duplicates using ant.

        3
  •  0
  •   user373201    15 年前

    尝试以下操作。您的测试应该扩展编译

    <dependency
    org="my.org"
    name="some-test-lib"
    rev="latest.release"
    conf="**test->compile**" />
    

    如果我是对的,Ivy应该发现这个测试扩展了编译,并且只下载一次slf4j。