Как решить "Причина: класс org.apache.tools.ant.taskdefs.optional.junit.JUnitTask не найден." при запуске "ant test"?

У меня есть целевой тест с именем, и я хочу сделать некоторые тесты.

Я помещаю здесь важные части в build.xml. Он включает в себя:

<property name='lib.dir' value='lib' />

<path id='classpath'>
     <fileset dir="${lib.dir}" includes="**/*.jar" />
</path>

И я положил junit.jar и ant -junit.jar (это обязательный?) в каталоге lib.

Однако, если я запустил

ant test.

Ошибка вывода:

test:

BUILD FAILED
/home/xiaohan/EclipseWorkSpace/AntTest/build.xml:82: Problem: failed to create task or type junit
Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found.
        This looks like one of Ant optional components.
Action: Check that the appropriate optional JAR exists in
        -/usr/share/ant/lib
        -/home/xiaohan/.ant/lib
        -a directory added on the command line with the -lib argument

Do not panic, this is a common problem.
The commonest cause is a missing JAR.

This is not a bug; it is a configuration problem

Кроме того, если я помещаю два файла jar в /usr/share/ant/lib с помощью набора $ANT_HOME, он все равно не работает.

Действительно спасибо за любые подсказки

Ответы

Ответ 1

В моем случае (с использованием Mint, на основе Debian)

sudo apt-get install ant-optional

- единственное, что сработало.

Ответ 2

Проблема была решена на системах на основе RHEL после установки ant -junit:

$ sudo yum install ant-junit

Ответ 3

<property name='lib.dir' value='lib' />

<path id='classpath'>
    <fileset dir="${lib.dir}" includes="**/*.jar" />
</path>

это не имеет ничего общего с Ant classpath. Это свойства, которые вы можете использовать в своих задачах. Вы должны поместить банки в предлагаемые директории или добавить аргумент командной строки.

Попробуйте запустить его следующим образом:

ant -lib /path/to/the/ant-junit.jar test

Ответ 4

Я видел это сообщение, потому что я пропустил включение ant -junit.jar из моего пути класса IDE, например. в Eclipse > Щелкните правой кнопкой мыши по вашему проекту > Запустить как > Запустить конфигурации.. > Путь к классам (вкладка) > Убедитесь, что существует ant -junit.jar.

Ответ 5

Когда вы запускаете задачи JUnit, вы должны убедиться, что оба ваших classpath, которые были использованы для ваших сборников, и путь к junit-банкам добавлены в ваш путь к классам.

Я предпочитаю помещать junit jars внутри моего проекта, поэтому другим не нужно устанавливать их на своих машинах, чтобы моя сборка работала. Я бы установил их в ${basedir}/antlib/junit

Я использую ${basedir}/antlib для хранения всех различных флагов, связанных с конструкцией Ant, таких как банки Ant -Contrib, JaCoCo, Findbugs и т.д. Так как это внутри моего проекта, проверка всегда будет включать эти банки и сборка будет работать для всех:

 <classpath id="junit.path">
    <fileset dir="${basedir}/antlib/junit"/>
</classpath>

Это создаст путь, содержащий ваши JUnit-банки. Теперь, чтобы скомпилировать тесты junit:

<javac dest="${target.dir}/test-classes"
   src=${src.test.java}">
   <classpath refid="javac.classpath"/>   <!-- Your main build classpath -->
   <classpath refid="junit.path"/>        <!-- Your JUnit classpath -->
   <classpath path="${main.destdir}"/>    <!-- These the classes you've built-->

Обратите внимание, что размещение банок JUnit в $ANT_HOME/lib main не работает, потому что это зависит от того, установлен ли <javac> includeAntRuntime или нет. Всегда рекомендуется не устанавливать этот набор, чтобы сделать вашу сборку более независимой от платформы.

Также не забудьте включить junit.path в свою задачу <junit>.