В чем разница между атрибутами <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