java - Ivy:具有不同依赖文件的多个检索任务

标签 java ant ivy

我正在尝试使用 Ivy 自动下载运行所需的 JAR 文件 PMDFindbugs .在大多数情况下,下载依赖项、设置 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属性。

最佳答案

问题是 Ivy retrieve taskpost resolve taks并自动/隐式运行 resolve 任务(如果尚未运行),因此第一个 retrieve 任务是唯一导致解析的任务。

解决方案是将所有依赖项放入一个 Ivy module configuration file 中,将不同的依赖项作为不同配置的一部分,然后在调用 retrive 任务时使用 conf 属性。例如,我在单个文件 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"/>

关于java - Ivy:具有不同依赖文件的多个检索任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30701254/

相关文章:

java - 调用包含 hbm2ddl 任务的 ant 脚本时,Runtime.exec 会卡住吗?

java - 通过 ant 构建脚本将命令行参数传递给 Java

java - 大型 Java 系统依赖管理

java - 无版本 gradle 依赖项

scala - 如何添加SBT解析器(服务器端)

java - 条件生成器分组依据和计数不起作用

java - 如何知道资源是否在 jsr-196 auth 模块中受到保护?

java - System.out.println();和 System.err.println();可互换打印

java - 基于这个或那个的正则表达式

javascript - 在 Ant 中使用 JavaScript