我正在尝试使用Ivy自动下载运行PMD和Findbugs所需的JAR文件。在大多数情况下,我没有问题下载依赖项,设置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
属性。
答案 0 :(得分:2)
问题是Ivy retrieve
task是post 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的发布和报告产生影响,但是这些方面会根据您的实际使用情况而有所不同,因此最好在新问题中进行详细说明。