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

Fea*_*nor 15 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>
Run Code Online (Sandbox Code Playgroud)

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

<path id="runtime.classpath">
        ...
        <!-- Target classes -->
        <pathelement path="${basedir}/target/classes/" />
</path>
Run Code Online (Sandbox Code Playgroud)

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

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

<path id="runtime.classpath">
        ...
        <!-- path attribute changed to location -->
        <pathelement location="${basedir}/target/classes/" />
</path>
Run Code Online (Sandbox Code Playgroud)

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

   <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>
Run Code Online (Sandbox Code Playgroud)

pathlocation属性有什么区别?我已经看过编写一个简单的构建文件(特别是类似路径的结构部分),但是在那本手册中,它看起来比我location更具体path.事实并非如此,但我无法弄清楚原因.

Pau*_*bel 8

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

手册

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

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

查看java任务的文档,特别是clonevm

clonevm:如果设置为true,则分叉Java虚拟机的所有系统属性和bootclasspath将与运行Ant的Java VM的相同.默认值为"false"(如果禁用fork,则忽略).自Ant 1.7起