【问题标题】:Ant build error while running run target运行运行目标时出现 Ant 构建错误
【发布时间】:2014-08-27 08:39:39
【问题描述】:

我正在使用 ant 1.9.0 运行我的 Java 项目。我有一个 bat 文件,其中包含命令 ant clean compile run。clean 和 compile 正在运行,但是对于目标运行,我遇到了错误

 C:\Users\Susanta\MyMaven\MyMavenProject\build] on class org.apache.
 tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter: java.lang.NoClassDefFoundErrorjunit/framework/TestListener

我正在附加 build.xml 请让我知道我的 build.xml 中的问题

<?xml version="1.0" encoding="iso-8859-1"?>
  <!DOCTYPE project [
]>

  <project name="MyMavenProject" default="usage" basedir=".">  

<!-- ========== Initialize Properties =================================== -->
<property environment="env"/>

<property name="ws.home" value="${basedir}"/>
<property name="ws.jars" value="${user.home}/.m2/repository/"/>
<property name="test.dest" value="${ws.home}/build"/>
<property name="test.src" value="${ws.home}/src"/>
<property name="test.reportsDir" value="${test.dest}/test_reports"/>




<path id="testcase.path">


    <pathelement location="${test.dest}"/>

    <fileset dir="${ws.jars}">
      <include name="*.jar"/>
    </fileset>

  </path>




<target name="setClassPath" unless="test.classpath">
    <path id="classpath_jars">
        <fileset dir="${ws.jars}" includes="**/*.jar"/>
    </path>
    <pathconvert pathsep=":" 
        property="test.classpath" 
        refid="classpath_jars"/>
</target>

<target name="init" depends="setClassPath">
    <tstamp>
        <format property="start.time" pattern="MM/dd/yyyy hh:mm aa" />
    </tstamp>
    <condition property="ANT" 
        value="${env.ANT_HOME}/bin/ant.bat" 
        else="${env.ANT_HOME}/bin/ant">
                <os family="windows" />
    </condition>

</target>

<!-- all -->
<target name="all">
</target>

<!-- clean -->
<target name="clean">
    <delete dir="${test.dest}"/>
</target>

<!-- compile -->
<target name="compile" depends="init, clean" > 
    <delete includeemptydirs="true" quiet="true">
        <fileset dir="${test.dest}" includes="**/*"/>
    </delete>
    <echo message="making directory..."/>
    <mkdir dir="${test.dest}"/>
    <echo message="classpath------: ${test.classpath}"/>
    <echo message="compiling..."/>
    <javac 
        debug="true" 
        destdir="${test.dest}" 
        srcdir="${test.src}" 
        target="1.5" 
        classpath="${test.classpath}"
    >
    </javac>
  </target>

<!-- build -->
<target name="build" depends="init">
</target>




<target name="usage">
    <echo>
        ant run will execute the test
    </echo>
</target>

<path id="test.run">
        <fileset dir="${ws.jars}" includes="**/*.jar"/>
</path>



<target name="run" >  
    <delete includeemptydirs="true" quiet="true">
                <fileset dir="${test.reportsDir}" includes="**/*"/>
            </delete>
            <java jar="${ws.jars}" fork="true" spawn="true" />  
            <junit fork="yes" haltonfailure="no" printsummary="yes">
                <classpath refid="test.run" />  

              <!--  <classpath ="${test.classpath}"/> -->  
            <batchtest  todir="${test.reportsDir}" fork="true">  
            <fileset dir="${test.dest}">  

          <!--include name="tests/LoginTest.class" />
         <include name="tests/Parameterized_Test.class" />
         <include name="tests/TestApplication.class" /-->
          <include name="com/testing/GoogleTest.class" />
          <include name="com/testing/YahooTest.class" />





            </fileset>  
            </batchtest>    
                <formatter type="xml" />  
                <classpath refid="testcase.path" />  
        </junit>  
            <junitreport todir="${test.reportsDir}">    
                <fileset dir="${test.reportsDir}">  
                    <include name="TEST-*.xml" />  
                </fileset>  
                <report todir="${test.reportsDir}" />  
            </junitreport>  
        </target>

以下是错误:

   C:\Users\Susanta\MyMaven\MyMavenProject\build] on class org.apache.
  tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter: java.lang.NoClassDefF
 oundError: junit/framework/TestListener
 [exec]     at java.lang.ClassLoader.defineClass1(Native Method)
 [exec]     at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
 [exec]     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
 [exec]     at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
 [exec]     at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
 [exec]     at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
 [exec]     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
 [exec]     at java.security.AccessController.doPrivileged(Native Method)
 [exec]     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
 [exec]     at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
 [exec]     at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
 [exec]     at org.apache.tools.ant.AntClassLoader.findBaseClass(AntClassLoader.java:1385)
 [exec]     at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoaderjava:1064)
 [exec]     at org.apache.tools.ant.util.SplitClassLoader.loadClass(SplitClassLoader.java:58)
 [exec]     at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
 [exec]     at java.lang.ClassLoader.defineClass1(Native Method)
 [exec]     at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
 [exec]     at org.apache.tools.ant.AntClassLoader.defineClassFromData(AntClassLoader.java:1128)
 [exec]     at org.apache.tools.ant.AntClassLoader.getClassFromStream(AntClassLoader.java:1299)
 [exec]     at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1354)
 [exec]     at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoaderjava:1315)
 [exec]     at org.apache.tools.ant.util.SplitClassLoader.loadClass(SplitClassLoader.java:52)
 [exec]     at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
 [exec]     at java.lang.Class.forName0(Native Method)
 [exec]     at java.lang.Class.forName(Class.java:266)
 [exec]     at 

   org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:286)
 [exec]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.logVmExit(JUnitTask.java:1653)
 [exec]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.logVmCrash(JUnitTask.java:1617)
 [exec]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeAsForked(JUnitTask.java:1099)
 [exec]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:851)
 [exec]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeOrQueue(JUnitTask.java:1899)
 [exec]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:800)
 [exec]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
 [exec]     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
 [exec]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 [exec]     at java.lang.reflect.Method.invoke(Method.java:601)
 [exec]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
 [exec]     at org.apache.tools.ant.Task.perform(Task.java:348)
 [exec]     at org.apache.tools.ant.Target.execute(Target.java:435)
 [exec]     at org.apache.tools.ant.Target.performTasks(Target.java:456)
 [exec]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
 [exec]     at org.apache.tools.ant.Project.executeTarget(Project.java:1364)

 [exec]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
 [exec]     at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
 [exec]     at org.apache.tools.ant.Main.runBuild(Main.java:851)
 [exec]     at org.apache.tools.ant.Main.startAnt(Main.java:235)
 [exec]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
 [exec]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
 [exec] Caused by: java.lang.ClassNotFoundException: junit.framework.TestListener
 [exec]     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
 [exec]     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
 [exec]     at java.security.AccessController.doPrivileged(Native Method)
 [exec]     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
 [exec]     at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
 [exec]     at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
 [exec]     ... 48 more
 [exec]
 [exec] Total time: 7 seconds
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.773s
[INFO] Finished at: Mon Jul 07 03:01:39 IST 2014
[INFO] Final Memory: 7M/18M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:
run (default) on project MyMavenProject: An Ant BuildException has occured: exec
 returned: 1
[ERROR] around Ant part ...<exec dir="C:\Users\Susanta\MyMaven\MyMavenProject" e
xecutable="C:\Users\Susanta\MyMaven\MyMavenProject\testrunner.bat" failonerror="
true">... @ 5:142 in C:\Users\Susanta\MyMaven\MyMavenProject\target\antrun\build
-runtheapp.xml
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal o
rg.apache.maven.plugins:maven-antrun-plugin:1.7:run (default) on project MyMaven
Project: An Ant BuildException has occured: exec returned: 1
around Ant part ...<exec dir="C:\Users\Susanta\MyMaven\MyMavenProject" executabl
e="C:\Users\Susanta\MyMaven\MyMavenProject\testrunner.bat" failonerror="true">..
. @ 5:142 in C:\Users\Susanta\MyMaven\MyMavenProject\target\antrun\build-runthea
pp.xml
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
    Caused by: org.apache.maven.plugin.MojoExecutionException: An Ant BuildException
  has occured: exec returned: 1
 around Ant part ...<exec dir="C:\Users\Susanta\MyMaven\MyMavenProject"    executable="C:\Users\Susanta\MyMaven\MyMavenProject\testrunner.bat" failonerror="true">..
. @ 5:142 in C:\Users\Susanta\MyMaven\MyMavenProject\target\antrun\build-runtheapp.xml

【问题讨论】:

标签: java xml ant


【解决方案1】:

这似乎是ANT 1.9.0 中的一个已知错误。看这里:Bamboo Ant Task fails when running junit task

阅读comments #4, #5, #8 &amp; #20 @THIS Link 寻求帮助。

【讨论】:

  • 迁移到 ANT 1.9.4 后我没有收到错误
【解决方案2】:

ANT 手册描述了junit task 如何需要一个额外的 jar。这可以从 Maven Central 下载

并安装在以下目录:

  • $HOME/.ant/lib

我个人使用名为 ivy 的 ANT 插件来管理构建的依赖项,请参阅:

【讨论】:

    【解决方案3】:

    看看你的错误信息:

    C:\Users\Susanta\MyMaven\MyMavenProject\build] on class \ 
        org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter: \
        java.lang.NoClassDefFoundError junit/framework/TestListener
    

    注意NoClassDefFoundError,这意味着Ant 找不到您的一项任务所引用的类。是否有与此错误相关的行号?应该有一个指向包含您的&lt;junit/&gt; 任务的行。即使没有这个,您也会看到找不到的类是junit/framework/TestListener

    Java 应用程序中的错误消息可能有点吓人,因为您会看到数十行甚至数百行堆栈跟踪。但是,可以将 Java 程序崩溃视为一场车祸。一辆汽车可能已经冲出马路,撞到电线杆,从那里反弹,撞到另一辆车,从那里反弹,撞倒消防栓等等。你会看到很长的损坏痕迹,但如果你看第一个事故发生的地方,一般都能看出问题(看,路上有香蕉皮!)

    Java 错误消息也是如此。第一行通常会准确地告诉您您需要知道的内容,并且例外情况很容易阅读。在这种情况下,NoClassDefFoundError 指向 junit 作为罪魁祸首。下次你看到这样的东西时,你就会知道要寻找什么了。


    正如Mark O'Connor 所指出的,JUnit 任务所需的 jars 不包含在 Ant 中。事实上,许多已定义的任务都没有运行这些任务所需的 jar,正如您在 this table 中看到的那样(&lt;junit&gt; 是该表中的第四项)。

    JUunit task 上的 Ant 手册中,它指出您可以执行以下操作:

    注意:您必须有junit.jar 可用。您可以执行以下操作之一:

    1. junit.jarant-junit.jar 都放入ANT_HOME/lib
    2. 不要将它们放入 ANT_HOME/lib,而是将它们的位置包含在您的 CLASSPATH 环境变量中。
    3. 使用 -lib 将两个 JAR 添加到您的类路径中。
    4. 在构建文件的&lt;taskdef&gt; 中使用&lt;classpath&gt; 元素指定两个JAR 的位置。
    5. ant-junit.jar 保留在ANT_HOME/lib 中的默认位置,但将junit.jar 包含在传递给中。 (自 Ant 1.7 起)

    我个人更喜欢最后一个。我通常将junit.jar 放在${basedir}/antlib/junit 中。这样,当有人检查我的项目时,他们会收到junit

    Ant FAQ 中讨论了&lt;junit&gt; 的一些问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 2012-05-29
      • 2019-11-26
      • 2014-09-15
      • 2011-11-02
      相关资源
      最近更新 更多