Класс taskdef org.apache.tools.ant.taskdefs.optional.junit.JUnitTask не найден
Я боролся с этой проблемой с прошлого дня. Мы используем Weblogic Workshop 81(WLW) в качестве IDE. Я попытался запустить junit в Eclipse, и он работает без проблем (без taskdef).
Я попробовал следующие подходы на WLW
Первый подход: я использовал почти тот же файл муравья (например, eclipse) для сборки в WLW, но он не может найти класс JunitTask при использовании taskdef, как показано ниже, он жалуется на класс, как показано ниже
Cannot parse Ant build file: ..... taskdef class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask cannot be found
build.xml
<project>
....
<path id="MyProject.classpath">
<pathelement location="${output.directory}/ant-optional.jar" />
<pathelement location="${output.directory}/junit.jar" />
<fileset dir="${output.directory}">
<include name="**/*.jar" />
</fileset>
<fileset dir="${platformhome.local.directory}\server\lib\">
<include name="**/*.jar" />
</fileset>
<pathelement path="${class.path}"/>
<dirset dir="${dest.path}">
</dirset>
</path>
<path id="classpath.test">
<fileset dir="C:\tools\Build\ant\apache-ant-1.8.2\lib">
<include name="**/*.jar" />
</fileset>
</path>
<taskdef name="junit"
classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask" classpathref="MyProject.classpath">
</taskdef>
<target name="test">
<echo>In Test</echo>
<mkdir dir="${junit.output.dir}" />
<junit>
<classpath refid="MyProject.classpath">
</classpath>
<batchtest todir="${junit.output.dir}">
<formatter type="plain" usefile="false"/>
<formatter type="plain" />
<fileset dir="${src.path}">
<include name="**/*Test*.java" />
</fileset>
</batchtest>
</junit>
</target>
</project>
Я проверил ant home с помощью флага -diagnostic при сборке в командной строке (используя версию ant, используемую веб-логикой, поэтому я проверяю правильную версию ant), я получил следующий ответ
------- Ant diagnostics report -------
Apache Ant version 1.5.3 compiled on August 13 2003
-------------------------------------------
Implementation Version (JDK1.2+ only)
-------------------------------------------
core tasks : null
optional tasks : 1.5.3
-------------------------------------------
ANT_HOME/lib jar listing
-------------------------------------------
ant.home: C:\tools\@#$@##$\bea\weblogic81\server\bin\\..
ant-optional.jar (671546 bytes)
avalon-framework.jar (62694 bytes)
batik.jar (2111580 bytes)
debugging.jar (274343 bytes)
EccpressoAsn1.jar (61543 bytes)
EccpressoCore.jar (133746 bytes)
EccpressoJcae.jar (107821 bytes)
ejbgen.jar (766896 bytes)
fop.jar (1479760 bytes)
jconn2.jar (909569 bytes)
jConnect.jar (764285 bytes)
JDIProxy.jar (86647 bytes)
jms450.jar (24470 bytes)
jms451.jar (25749 bytes)
jms500.jar (26572 bytes)
jms51-interop.jar (4720 bytes)
jms510.jar (26572 bytes)
jsafeFIPS.jar (404439 bytes)
junit.jar (121070 bytes)
Это означает, что ANT_HOME имеет ant-optional.jar
& junit.jar
у которого есть JunitTask.java, который отвечает за запуск модульных тестов из ant.
Я даже добавил вышеупомянутые фляги в classpath проекта так, это будет скомпилировано с проектом.
Второй подход - на этот раз я удалил taskdef из файла ant, чтобы посмотреть, сможет ли муравей сам найти задачу junit из пути к классам. Выдано следующее исключение.
ERROR: Could not create task or type of type: junit.
ERROR: Ant could not find the task or a class this task relies upon.
ERROR: This is common and has a number of causes; the usual
ERROR: solutions are to read the manual pages then download and
ERROR: install needed JAR files, or fix the build file:
Может ли кто-нибудь дать мне указатели на это. Благодарю.
1 ответ
Я думаю, вам нужно прочитать о classpath, bootstrap class loader and ant's class loader
, Смотри ЗДЕСЬ и пройдите три ответа на <junit>-and-<classpath>
Вы также, кажется, пропали без вести ant-junit.jar
,
из док. ЗДЕСЬ, выполните ОДИН из следующих действий:
- Поместите оба файла junit.jar и ant-junit.jar в ANT_HOME/lib.
- Не помещайте их ни в ANT_HOME/lib, а вместо этого включайте их расположение в переменную среды CLASSPATH.
- Добавьте оба JAR-файла в ваш путь к классу, используя -lib.
- Укажите расположение обоих JAR-файлов, используя элемент в файле компоновки.
- Оставьте ant-junit.jar в его расположении по умолчанию в ANT_HOME/lib, но включите junit.jar в передаваемый. (начиная с Ant 1.7)
также, для справки, есть рабочаяbuild.xml
ЗДЕСЬ Вы можете сослаться на это, если это необходимо.