我正在尝试使用 Ivy 自动下载运行所需的 JAR 文件 PMD和 Findbugs .在大多数情况下,下载依赖项、设置 cachepath
等都没有问题。问题是,如果我使用 Ant 来运行 PMD,我只想下载 PMD 依赖项,对于 Findbugs 也是类似的。所以我制作了两个不同的 XML 文件来定义依赖项,conf/ivy/pmd.xml
和 conf/ivy/findbugs.xml
,我的 PMD 任务是这样的:
<ivy:retrieve file="conf/ivy/pmd.xml"/>
<ivy:cachepath pathid="pmd.path"/>
如果在单次 Ant 调用中我只使用 PMD 或只使用 Findbugs,这会很好地工作。但是,如果我尝试在一次调用中同时使用这两者,那么第二个要运行的 ivy:cachepath
任务的行为与第一个要运行的任务完全相同,即使它们有不同的 file
属性。
最佳答案
问题是 Ivy retrieve
task是 post 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/