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

问题描述 投票:3回答:2

我正在尝试使用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或仅使用Findbug,则此方法很好。但是,如果我尝试在一次调用中同时使用两者,那么即使它们具有不同的ivy:cachepath属性,要运行的第二个file任务的行为也与第一个任务完全相同。

java ant ivy
2个回答
2
投票

问题是Ivy retrieve taskretrieve,并且如果尚未运行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"/>
    

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.