Ant中的<pathelement>属性'path'和'location'之间有什么区别?</pathelement>

时间:2011-08-25 18:56:48

标签: java ant

我在TestNG中使用Ant Java任务运行Selenium单元测试,如下所示:

<java classpathref="runtime.classpath"
    classname="org.testng.TestNG"
    failonerror="false">
    <arg value="-d" />
    <arg value="${grid.location}/target/reports" />
    <arg value="${lib.location}/testng.xml"/>   
</java>

runtime.classpath是一个包含<pathelement path="${basedir}/target/classes/" />的路径式结构,我认为需要让TestNG知道要运行哪些类。

<path id="runtime.classpath">
        ...
        <!-- Target classes -->
        <pathelement path="${basedir}/target/classes/" />
</path>

但是,我在日志中一直看到TestNG找到了0个适用的类。

我最终得到了一位同事的帮助,看来这是关键变化:

<path id="runtime.classpath">
        ...
        <!-- path attribute changed to location -->
        <pathelement location="${basedir}/target/classes/" />
</path>

这也正确地引入了测试类:

   <java classpathref="runtime.classpath"
       classname="org.testng.TestNG"
       failonerror="false">
       <arg value="-d" />
       <arg value="${grid.location}/target/reports" />
       <arg value="${lib.location}/testng.xml"/>
       <classpath>
           <pathelement location="${basedir}/target/classes/" />
       </classpath> 
   </java>

pathlocation属性有什么区别?我查看了Writing a Simple Buildfile(特别是类路径结构部分),但在该手册中,我认为locationpath更具体。这似乎不是凭经验,但我无法弄清楚原因。

1 个答案:

答案 0 :(得分:8)

看起来路径和位置之间的差异是许多条目与一个条目。位置是文件或目录,路径可以是列表。

来自manual

  

location属性指定单个文件或目录相对   到项目的基目录(或绝对文件名),而   path属性接受以冒号或分号分隔的列表   位置。 path属性旨在与预定义一起使用   paths - 在任何其他情况下,具有位置属性的多个元素   应该是首选。

请注意,ant使用的JVM与java任务使用的JVM几乎没有关系。默认情况下,ant的环境与通过ant的java任务启动的环境不同。当你想要使用一个蚂蚁想要使用的不同JVM并使事情变得明确时,这实际上是有用的,有助于避免以后出现意外。

查看java task的文档,特别是clonevm

  

clonevm:如果设置为true,则表示所有系统属性和   分叉的Java虚拟机的bootclasspath将是相同的   那些运行Ant的Java VM。默认为“false”(如果fork则忽略)   被禁用)。自Ant 1.7