ANT junit任务中的相对路径问题

时间:2010-02-23 03:29:27

标签: ant junit

我已经设置了一个ant脚本作为eclipse构建器来自动运行我的所有测试,如下所示:

<project name="auto-test" default="test">
    <property name="tst-dir" location="C:\STAF\services\custom\TopCoder\bin" />
    <path id="classpath.base" />
    <path id="classpath.test">
        <pathelement location="D:\eclipse\eclipse\plugins\org.junit4_4.3.1\junit.jar" />
        <pathelement location="${tst-dir}" />
        <path refid="classpath.base" />

    </path>
    <target name="test" description="Run the tests">
        <junit>
            <classpath refid="classpath.test" />
            <formatter type="brief" usefile="false" />
            <test name="testDataGenerator.test.AllTests" />
        </junit>
    </target>
</project>

在将测试夹具文件从绝对路径更改为相对路径之前,这一切都很好:

SAXReader reader = new SAXReader();
Document document = reader.read(new File(".").getCanonicalPath()+"\\conf\\TestData.xml");

现在,ant任务尝试打开 D:\ eclipse \ eclipse \ conf \ TestData.xml ,而不是 C:\ STAF \ services \ custom \ TopCoder \ conf \ TestData。 xml ,我也尝试从Eclipse手动运行AllTests,这一切都很好。

之前有没有人遇到类似的问题?

提前致谢。

PS。 ANT_HOME = d:\蚀\蚀\插件\ org.apache.ant_1.7.0.v200706080842

跟进: 我试图从命令行运行ant脚本,并在下面找到:

  1. C:\ STAF \ services \ custom \ TopCoder&gt; ant -fc:\ STAF \ services \ custom \ TopCoder \ task \ build.xml ,ant脚本正常工作。< / p>

  2. C:&gt; ant -fc:\ STAF \ services \ custom \ TopCoder \ task \ build.xml ,脚本将声明:[junit] C:\ conf \ TestData .xml(系统找不到指定的路径)

  3. 我还检查过eclipse builder设置,似乎没有什么可以改变 D:\ eclipse \ eclipse的路径。

3 个答案:

答案 0 :(得分:1)

Java解析当前用户目录的相对路径,该目录通常是调用java程序的目录。

克服此问题的一种方法是为基本路径定义环境变量。然后,您可以轻松使用“相对路径”(意思是,通过连接基本路径和相对路径来创建绝对路径)。

答案 1 :(得分:1)

以下是我找到的解决方案:

就像kgiannakakis提到的那样,Ant也从它被调用的位置开始执行它的任务,所以我们只需要更改自定义eclipse构建器的工作目录设置。

  1. 在JRE选项卡中,选择“执行环境”。

  2. 将工作目录更改为当前工作区。

  3. alt text

答案 2 :(得分:0)

看起来我已经错过了业力,但无论如何......

我们这样做: -

在build.xml

<project name="whatever">
  <property file="build.${env.COMPUTERNAME}.properties"/>
  <property file="build.properties"/>

build.properties

project.root=..
build.file.dir=${project.root}/buildfiles
deploy.dir=${project.root}/deploy

当然,您可以通过创建OWN build.computername.properties来覆盖,以允许开发人员路径差异等