常春藤:具有不同依赖项文件的多个检索任务

时间:2015-06-08 04:28:47

标签: java ant ivy

我正在尝试使用Ivy自动下载运行PMDFindbugs所需的JAR文件。在大多数情况下,我没有问题下载依赖项,设置cachepath,等等。问题是,如果我使用Ant来运行PMD,我只想下载PMD依赖项,类似于Findbugs。所以我制作了两个不同的XML文件来定义依赖项conf/ivy/pmd.xmlconf/ivy/findbugs.xml,而我的PMD任务我有类似的东西:

    <ivy:retrieve file="conf/ivy/pmd.xml"/>
    <ivy:cachepath pathid="pmd.path"/>

如果在单个Ant调用中我只使用PMD或仅使用Findbugs,这可以正常工作。但是,如果我尝试在单个调用中同时使用它们,则运行的第二个ivy:cachepath任务与第一个要运行的任务完全相同,即使它们具有不同的file属性。

2 个答案:

答案 0 :(得分:2)

问题是Ivy retrieve taskpost resolve taks并且如果尚未运行则自动/隐式运行resolve任务,因此第一个retrieve任务是唯一一个解决问题的人。

解决方案是将所有依赖项放入单个Ivy module configuration file中,使不同的依赖项成为不同配置的一部分,然后在调用conf任务时使用retrive属性。例如,我在单个文件conf/ivy/ivy.xml中设置了“findbugs”conf和“pmd”conf:

<ivy-module version="2.0">
    <info organisation="com.nightrealms" module="JavaLike"/>

    <configurations>
        <conf name="findbugs" description="findbugs JAR files"/>
        <conf name="pmd"      description="PMD JAR files"/>
    </configurations>

    <dependencies>
        <dependency org="net.sourceforge.pmd" name="pmd-core" rev="5.3.2"
            conf="pmd->default"/>
        <dependency org="net.sourceforge.pmd" name="pmd-java" rev="5.3.2"
            conf="pmd->default"/>
        <dependency org="com.google.code.findbugs" name="findbugs"
            rev="3.0.1" conf="findbugs->default"/>
    </dependencies>
</ivy-module>

然后在build.xml

    <ivy:retrieve file="conf/ivy/ivy.xml" conf="findbugs"/>

答案 1 :(得分:0)

每次调用检索常春藤都会设置一些蚂蚁属性。蚂蚁属性是不可变的,因此这意味着您只能调用一次检索。

但是,您可以使用AntCall来解决此问题。每次您使用AntCall任务时,都会从有关蚂蚁属性的角度入手。请注意,AntCall还清除了已经运行了哪些目标的清单,因此depends中的所有目标都将再次运行。

  <target name="resolve" description="">
    <antcall target="resolve.ivyfile1"/>
    <antcall target="resolve.ivyfile2"/>
  </target>

  <target name="resolve.ivyfile1" description="">
    <ivy:retrieve file="ivy1.xml"/>
  </target>
  <target name="resolve.ivyfile2" description="">
    <ivy:retrieve file="ivy2.xml"/>
  </target>

这也会对ivy的发布和报告产生影响,但是这些方面会根据您的实际使用情况而有所不同,因此最好在新问题中进行详细说明。