taskdef class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask找不到

时间:2014-07-21 21:57:15

标签: java ant weblogic8.x

自从最后一天以来,我一直在努力解决这个问题。我们使用Weblogic workshop 81(WLW)作为IDE。我尝试在eclipse中运行junit,它没有任何问题(没有 taskdef )。

我在WLW上尝试了以下方法

第一种方法:我使用了几乎相同的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 home(使用web-logic使用的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&amp; junit.jar具有JunitTask.java,负责从ant运行单元测试。

我甚至在项目的类路径中添加了上面提到的jar,因此,它将与项目一起编译。

第二种方法这次我从ant文件中删除了 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 个答案:

答案 0 :(得分:1)

我认为你需要阅读classpath, bootstrap class loader and ant's class loader。请参阅HERE并查看<junit>-and-<classpath>

上的三个问题

您似乎也缺少ant-junit.jar

来自doc。 HERE,执行以下 ONE

  
      
  • 将junit.jar和ant-junit.jar放在ANT_HOME / lib中。
  •   
  • 不要将它们放在ANT_HOME / lib中,而是将它们的位置包含在CLASSPATH环境变量中。
  •   
  • 使用-lib将两个JAR添加到类路径中。
  •   
  • 使用构建文件中的a元素指定两个JAR的位置。
  •   
  • 将ant-junit.jar保留在ANT_HOME / lib的默认位置,但在传递给的包含junit.jar。 (自Ant 1.7起)
  •   

另外,作为参考,正在工作build.xml HERE。您可以参考,如果需要