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

2022-09-03 15:44:31

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

<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是一个路径结构,它包括 ,我认为这是让 TestNG 知道要运行哪些类所必需的。<pathelement path="${basedir}/target/classes/" />

<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>

和 属性之间有什么区别?我已经看过编写一个简单的构建文件(特别是类似路径的结构部分),但是在那本手册中,它看起来比.从经验上讲,情况似乎并非如此,但我不能完全弄清楚为什么。pathlocationlocationpath


答案 1

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

手册

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

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

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

clonevm:如果设置为 true,则分叉的 Java 虚拟机的所有系统属性和引导类路径将与运行 Ant 的 Java VM 的属性和引导类路径相同。默认值为“false”(如果禁用了 fork,则忽略)。自蚂蚁1.7起


答案 2

推荐