3

我正在尝试从 Ant 内部调用 FindBugs。为了控制 FindBugs 可用的内存量,我选择不使用 ant-task。我现在遇到的问题是我想在命令行上将一些 jars 传递给 FindBugs:

java -jar .../findbugs.jar foo.jar bar.jar fie.jar

但是,由于这些 jars 实际上是 Eclipse 插件,所以我不知道 jars 的确切名称,所以我需要一种使用通配符来获取列表的方法。这就是我想出的:

<target name="findbugs">
    <property name="findbugs.home" location="${user.home}/eclipse/findbugs" />
    <path id="findbugs.input">
        <fileset dir="${testDirectory}/eclipse/plugins">
            <include name="my.plugins.*.jar" />
        </fileset>
    </path>
    <path id="findbugs.auxinput">
        <fileset dir="${testDirectory}/eclipse/plugins">
            <include name="*.jar" />
            <include name="**/*.jar" />
        </fileset>
    </path>
    <java jar="${findbugs.home}/lib/findbugs.jar" fork="true">
        <jvmarg value="-Xmx1048m" />
        <arg value="-textui" />
        <arg value="-output" />
        <arg value="findbugs.xml" />
        <arg value="-xml" />
        <arg value="-exclude" />
        <arg value="${basedir}/findbugsExclude.xml" />
        <arg value="-auxclasspath" />
        <arg pathref="findbugs.auxinput"/>
        <arg pathref="findbugs.input" />
    </java>
</target>

然而,findbugs.inputpathref 是一个逗号分隔的 jar 列表,而不是 FindBugs 想要的空格分隔。如何将 jar 列表作为空格分隔的列表?

(使用 FindBugs ant-task 是否更容易做到这一点。我无法从文档中真正看出。)

4

3 回答 3

2

使用pathconvert,如下所示:

<pathconvert pathsep="," property="findbugs.input.csv" refid="findbugs.input"/>

在您提供的目标中实现,我将引用从更改<arg pathref="findbugs.input" /><arg value="${findbugs.input.csv}" />

<target name="findbugs">
    <property name="findbugs.home" location="${user.home}/eclipse/findbugs" />
    <path id="findbugs.input">
        <fileset dir="${testDirectory}/eclipse/plugins">
            <include name="my.plugins.*.jar" />
        </fileset>
    </path>
    <pathconvert pathsep="," property="findbugs.input.csv"
                 refid="findbugs.input"/>

    <path id="findbugs.auxinput">
        <fileset dir="${testDirectory}/eclipse/plugins">
            <include name="*.jar" />
            <include name="**/*.jar" />
        </fileset>
    </path>

    <echo message="${findbugs.input.csv}" />

    <java jar="${findbugs.home}/lib/findbugs.jar" fork="true">
        <jvmarg value="-Xmx1048m" />
        <arg value="-textui" />
        <arg value="-output" />
        <arg value="findbugs.xml" />
        <arg value="-xml" />
        <arg value="-exclude" />
        <arg value="${basedir}/findbugsExclude.xml" />
        <arg value="-auxclasspath" />
        <arg pathref="findbugs.auxinput"/>
        <arg value="${findbugs.input.csv}" />
    </java>
</target>
于 2009-08-31T13:04:46.030 回答
1

使用 <pathconvert> 将路径转换为正确的格式,将其存储到属性中,然后使用 <arg value...> 而不是 <arg pathref...>

于 2009-08-31T11:57:41.560 回答
0

您可以从 ant 任务中控制内存:

    <findbugs   jvmargs="-Xms512m -Xmx512m" ...>
      ...
   </findbugs>
于 2009-08-31T15:19:49.183 回答