运行JUnit任务时竹ant任务失败。(Bamboo Ant Task fails when run

2019-09-02 11:44发布

在我目前的项目中,我使用JUnit测试。 乳宁在我的本地PC我的Ant文件生成我的测试报告符合市场预期,但是当竹尝试运行我的测试中,它产生以下输出。

请告诉我我的错误?

SimplerTest.java

import static org.junit.Assert.*;

import org.junit.Test;

public class SimplerTest {


@Test
public void dummerTest()
{
    assertTrue(true);
}
}

本地输出:

Buildfile: C:\Users\jussi\git\kingdom-builder-repository\build.xml

compile-test:
[javac] Compiling 1 source file to C:\Users\jussi\git\kingdom-builder-repository\bin

junit:
    [junit] Running me.jussi.kingdombuilder.SimplerTest
    [junit] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0,062 sec

main:

BUILD SUCCESSFUL
Total time: 1 second

服务器的输出:

compile-test:
[javac] Compiling 1 source file to /var/atlassian/application-data/bamboo/xml-data/build-dir/KB-KBP1-JOB1/bin

junit:

BUILD FAILED
/var/atlassian/application-data/bamboo/xml-data/build-dir/KB-KBP1-JOB1/build.xml:108: Using loader AntClassLoader[/opt/apache-ant-1.9.0/lib/ant-launcher.jar:/opt/ant/lib/ant.jar:/opt/ant/lib/ant-junit.jar:/opt/ant/lib/ant-junit4.jar:/var/atlassian/application-data/bamboo/xml-data/build-dir/KB-KBP1-JOB1/kingdom-builder/libs/junit-4.10.jar:/var/atlassian/application-data/bamboo/xml-data/build-dir/KB-KBP1-JOB1/bin] 
on class org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter: java.lang.NoClassDefFoundError: junit/framework/TestListener

build.xml文件

<?xml version="1.0"?>
<project name="KingdomBuild" default="main" basedir=".">
<!-- Sets variables which can later be used. -->
<!-- The value of a property is accessed via ${} -->

<property name="test.src.dir" location="kingdom-builder/test" />
<property name="build.dir" location="bin" />
<property name="test.report.dir" location="testreport" />

<!-- Define the classpath which includes the junit.jar and the classes after compiling-->
<path id="junit.class.path">
    <pathelement location="kingdom-builder/libs/junit-4.10.jar" />
    <pathelement location="${build.dir}" />
</path>

<!-- Compiles the java code (including the usage of library for JUnit -->
<target name="compile-test">
    <javac srcdir="${test.src.dir}" destdir="${build.dir}" includeantruntime="false">
        <classpath refid="junit.class.path" />
    </javac>
</target>


<!-- Run the JUnit Tests -->
<!-- Output is XML, could also be plain-->
<target name="junit" depends="compile-test">
    <junit printsummary="on" fork="true" haltonfailure="true">
        <classpath refid="junit.class.path" />
        <formatter type="xml" />
        <batchtest todir="${test.report.dir}">
            <fileset dir="${build.dir}">
                <include name="**/*Test*.class" />
            </fileset>
        </batchtest>
    </junit>
</target>

<target name="main" depends="junit">
    <description>Main target</description>
</target>
</project>

蚂蚁-v输出:

http://nopaste.info/1abdd27a8e.html

Answer 1:

感谢您的详细蚂蚁输出。

您似乎在您的Bamboo服务器上运行Ant的1.9.0。 有一个已知的问题(缺陷54835 -类路径的使用似乎在JUnit Ant任务被打破? )在Ant bug跟踪系统,这是对SO开始通过类似的问题的海报:“ 类不是蚂蚁,常春藤和JUnit发现-在build.xml文件错误? “:

BUILD FAILED
/home/andrew/project/guice/hg/build.xml:33: java.lang.NoClassDefFoundError: junit/framework/TestListener
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
...
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: java.lang.ClassNotFoundException: junit.framework.TestListener
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
...

这个问题并没有一个明确的/简短的回答,但错误报告的作用:

它看起来像类搜索被委托给系统的类加载器,而不是由Ant的类加载器(系统类加载器没有的JUnit knoweldge因为JUnit是不是在核心Ant的类路径被处理,而是由常春藤加入JUnit的任务)。 鉴于一些JUnit类必须已经加载到走到今天这一步,Ant的类加载器可以看到常春藤加载JUnit的广口瓶,但斯普利特类加载器似乎试图加载由JUnit运行所使用的类时要委托不正确。

换句话说:Ant的junit任务有缺陷,并不会工作,我觉得你这个具体问题的影响。 错误报告的推移并列出这些修复/解决方法:

  • 等待蚂蚁1.9.1(错误报告被标记为固定和释放,可以预计很快)
  • 您的JUnit JAR复制到您ANTLIB目录,并保持使用Ant 1.9.0。 这不太好,如果你想混JUnit的版本,但如果你用的是4.10左右,它应该工作。
  • 使用Ant 1.8.4


文章来源: Bamboo Ant Task fails when running junit task