Класс taskdef org.apache.tools.ant.taskdefs.Optional.junit.JUnitTask не найден

Я боролся с этой проблемой с последнего дня. Мы используем Weblogic Workshop 81 (WLW) в качестве IDE. Я попытался запустить junit в eclipse, и он работает без проблем (без taskdef).

Я попробовал следующие подходы на WLW

1-й подход: я использовал почти такой же файл ant (например, 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>

Я проверил дом муравья, используя флаг -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.

Я даже добавил вышеупомянутые банки в путь к классам проекта, чтобы он скомпилировался с проектом.

2-й подход на этот раз я удалил 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: 

Может ли кто-нибудь дать мне указатели на это. Спасибо.


person Zeus    schedule 21.07.2014    source источник


Ответы (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 ЗДЕСЬ. вы можете сослаться на это, при необходимости.

person sunbabaphu    schedule 21.07.2014