В чем разница между атрибутами <pathelement> 'path' и 'location' в Ant?

Я запускал блок-тесты Selenium в TestNG с задачей 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 - это путьная структура, включающая <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>

В чем разница между атрибутами path и location? Я просмотрел Написание простого файла сборки (в частности, раздел Path-like Structures), но в этом руководстве мне кажется, что location более конкретно, чем path. Это не похоже на эмпирически, но я не могу понять, почему.

Ответы

Ответ 1

Похоже, что разница между контуром и местоположением - это много записей против одного. Местоположение - это файл или каталог, путь может быть списком.

Из manual

Атрибут location указывает один относительный файл или каталог к базовому каталогу проекта (или абсолютному имени файла), в то время как атрибут path принимает списки, разделенные двоеточием или точкой с запятой местах. Атрибут path предназначен для использования с предопределенными пути - в любом другом случае, несколько элементов с атрибутами местоположения должно быть предпочтительным.

Обратите внимание, что JVM, используемый ant, практически не имеет отношения к JVM, используемому java-задачей. По умолчанию среда ant отличается от среды, запущенной с помощью java-задачи, через ant. Это действительно полезно, если вы хотите использовать другую JVM, которую хочет использовать ant, и делает вещи явными, помогая избежать неожиданностей позже.

Ознакомьтесь с документами для java task, особенно clonevm

clonevm: если установлено значение true, то все свойства системы и bootclasspath разветвленной виртуальной машины Java будет такой же, как и те из Java VM, на которых запущен ant. По умолчанию "false" (игнорируется, если fork выключен). поскольку ant 1.7