Ant结合使用两个refid作为类路径

时间:2014-08-01 16:02:00

标签: ant junit

我有两个refid到路径'config.classpath'和'test.classpath'。

现在我想写一些类似

的内容
<path id="config.classpath">
    <filelist dir="${lib.dir}">
        ...
    </filelist>
</path>

<path id="test.classpath">
    <filelist dir="${lib.dir}">
        <file name="junit-3.8.1.jar"/>
    </filelist>
</path>

<target name="test">
    <junit>
        <classpath>
            <filelist refid="test.classpath"/>
            <filelist refid="config.classpath"/>
        </classpath>
        ...
    </junit>
</target>

当我运行测试任务时,构建失败并带有

test.classpath doesn't denote a filelist

所以我删除了整个部分,并尝试了这样的

<filelist dir="${lib.dir}" id ="test.classpath">
    <file name="junit-3.8.1.jar"/>
</filelist>

但随后

失败了
test.classpath doesn't denote a path

那时我有点生气,因为它之前是一条路,现在不再抱怨它不是一条了。

如何在junit任务中组合这两条路径(不写额外30行)。

我也试过这个

<path id="test.classpath">
    <fileset dir="${lib.dir}">
        <include name="junit-3.8.1.jar"/>
    </fileset>
</path>

但这也给了我“不是文件列表错误”。

2 个答案:

答案 0 :(得分:4)

您的问题是您的引用是路径而不是文件列表。您需要在类路径中使用<path>

<target name="test">
    <junit>
        <classpath>
            <path refid="test.classpath"/>
            <path refid="config.classpath"/>
        </classpath>
        ...
    </junit>
</target>

答案 1 :(得分:0)

使用fileset而不是filelist,引用作为类路径中的路径

<path id="config.classpath">
    <fileset dir="${lib.dir}">
        ...
    </fileset>
</path>

<path id="test.classpath">
    <fileset dir="${lib.dir}">
        <include name="junit-3.8.1.jar"/>
    </fileset>
</path>

<target name="test">
    <junit>
        <classpath>
            <path refid="test.classpath"/>
            <path refid="config.classpath"/>
        </classpath>
        ...
    </junit>
</target>

我的本​​地测试示例如下。

<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="default">
    <description>
            description
    </description>
    <property name="lib.dir" location="${basedir}/target/lib"></property>

    <path id="config.classpath">
        <fileset dir="${lib.dir}">
            <include name="commons-lang-2.6.jar"/>
        </fileset>
    </path>

    <path id="test.classpath">
        <fileset dir="${lib.dir}">
            <include name="commons-io-2.1.jar"/>
        </fileset>
    </path> 
    <target name="default" description="description">


        <available classname="org.apache.commons.lang.StringUtils" property="string.utils.found" classpathref="config.classpath"></available>
        <available classname="org.apache.commons.io.IOUtils" property="io.utils.found" classpathref="config.classpath"></available>

        <echo>string.utils.found=${string.utils.found}</echo>
        <echo>io.utils.found=${io.utils.found}</echo>

        <!-- combined classpath -->
        <available classname="org.apache.commons.lang.StringUtils" property="string2.utils.found">
            <classpath>
                    <path refid="test.classpath"></path>
                    <path refid="config.classpath"></path>
                </classpath>
        </available>
        <available classname="org.apache.commons.io.IOUtils" property="io2.utils.found" >
            <classpath>
                    <path refid="test.classpath"></path>
                    <path refid="config.classpath"></path>
                </classpath>
        </available>

        <echo>string2.utils.found=${string2.utils.found}</echo>
        <echo>io2.utils.found=${io2.utils.found}</echo>
    </target>

</project>

输出:

     [echo] string.utils.found=true
     [echo] io.utils.found=${io.utils.found}
     [echo] string2.utils.found=true
     [echo] io2.utils.found=true
BUILD SUCCESSFUL