java - 运行 junit 任务时 Bamboo Ant 任务失败

标签 java junit ant bamboo

在我当前的项目中,我正在使用 junit 测试。在我的本地电脑上运行我的 ant 文件会按预期生成我的测试报告,但是当 bamboo 尝试运行我的测试时,它会生成以下输出。

我的错误是什么?

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>

ant -v 输出:

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

最佳答案

感谢 Ant 的详细输出。

看来您正在 Bamboo 服务器上运行 Ant 1.9.0。 Ant 错误跟踪器中存在一个已知问题(错误 54835 - Classpath use seems to be broken in junit ant task?),该问题是由 SO 上类似问题的发帖人发起的:“Class not found with Ant, Ivy and JUnit - error in 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)
...

该问题没有明确/简短的答案,但错误报告有:

It looks like the class search is being delegated to the System's classloader rather than being handled by the Ant Classloader (the system Classloader has no knoweldge of JUnit since JUnit isn't on the core Ant Classpath, but is added to the JUnit task by Ivy). Given some JUnit classes must have already been loaded to have reached this point, the Ant Classloader can see the JUnit jars loaded by Ivy, but the Split Classloader seems to be delegating incorrectly when trying to load classes used by the JUnit Runner.

换句话说:Ant 的 JUnit 任务有错误,无法运行,我认为您受到了这个特定错误的影响。错误报告继续并列出了这些修复/解决方法:

  • 等待 Ant 1.9.1(错误报告已标记为已修复,预计很快就会发布)
  • 将 JUnit JAR 复制到 ANTLIB 目录并继续使用 Ant 1.9.0。如果您想混合使用 JUnit 版本,这不是很好,但如果您只使用 4.10 左右,它应该可以工作。
  • 使用 Ant 1.8.4

关于java - 运行 junit 任务时 Bamboo Ant 任务失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16481801/

相关文章:

Java每0.5秒在动画中 move jlabel

java - 在所有 junit 测试用例中重用缓存

ant - 安静的个体 Ant 任务

android - 自定义 ant 任务以自动生成 android apk

java - 为什么我的 Cucumber 步骤类无法打开 Firefox 浏览器?

java - 如何为新的 java 项目生成 build.xml?

java - 如何删除此异常 "Exception in thread "main"java.lang.UnsatisfiedLinkError : no jniopencv_objdetect in java. library.path"

java - 从部分 XML 向 TableLayout 添加更多行

java - 不使用 ObjectOutputStream 复制可序列化对象

java - 避免 Maven 提示没有任何 @Test 的模拟对象