Jenkins无法找到JUnit(Netbeans + Git + Ant + JUnit + Jenkins)

4
我该如何让Jenkins在使用Ant构建时找到JUnit?
阅读这里这里的答案,我认为这是一个classpath问题,但我无法解决它。在我的Netbeans项目中,我有一个单独的JUnit测试,在Netbeans中运行得很好。我将项目推送到我的Git存储库,Jenkins看到更改并构建项目,但我会收到一堆错误(如下),因为找不到JUnit。
-do-compile-test:
    [javac] Compiling 1 source file to C:\Jenkins\jobs\demo\workspace\demo\build\test\classes
    [javac] C:\Jenkins\jobs\demo\workspace\demo\test\MainTest.java:6: package org.junit does not exist
    [javac] import org.junit.After;
    [javac]                 ^
    [javac] C:\Jenkins\jobs\demo\workspace\demo\test\MainTest.java:7: package org.junit does not exist
    [javac] import org.junit.AfterClass;
    [javac]  

           ^

JUnit位于我的%ANT_HOME%\lib目录中(Windows 7 64位)。我的Netbeans项目的文件结构如下所示: enter image description here 我尝试通过Ant进行类路径编辑,如此处所述,但无法使其正常工作。
这是我第一次使用Ant、JUnit和Jenkins,但我认为我离在Netbeans和Git中正确地使它们全部工作非常接近了。我将非常乐意提供更多信息。我已经在奋斗了3天,因此任何帮助都将不胜感激。
3个回答

1

我知道回复有点晚了,但现在我们有了解决这个问题的方法...

我遇到了相同的问题,我的项目是由Ant构建的。我通过在build.xml中添加路径来解决,包括junit.jar和hamcrest-core.jar。

  1. 从junit存储库中下载junit.jar和hamcrest-core.jar:https://github.com/junit-team/junit/wiki/Download-and-Install

  2. 将文件粘贴到Jenkins/Hudson服务器上的某个位置

  3. 编辑您的build.xml文件,添加以下行:

    <property name="JUNIT_HOME" value="包含junit和hamcrest jar文件的文件夹路径"/>
    <path id="JUnit 4.libraryclasspath">
        <pathelement location="${JUNIT_HOME}/junit.jar"/>
        <pathelement location="${JUNIT_HOME}/hamcrest-core.jar"/>
    </path>
    <path id="projectname.classpath">
        <pathelement location="您的bin文件夹路径"/>
        <path refid="JUnit 4.libraryclasspath"/>
    </path>
    
    <!--在javac任务中包括classpath-->
    <javac debug="true" debuglevel="${debuglevel}" destdir="您的bin文件夹路径" source="${source}" target="${target}">
        <src path="src"/>
        <classpath refid="projectname.classpath"/>
    </javac>
    
  4. 将文件提交到svn、git或其他服务器

  5. 尝试构建。现在junit已经在您的classpath中,jenkins可以完成构建


+1 解决了我的问题。不过有个问题想问一下。javac元素是放在build.xml还是nbproject/build-impl.xml中?destdir指的是build/classes吗?非常感谢任何帮助。 - simgineer
build.xml是Ant文件,用于Jenkins。我使用Eclipse生成此文件并上传到SVN存储库。destdir是放置.class文件的目录。 - Grubhart

0

你可以在NetBeans中处理这个问题,而不必自己搞定Ant文件。

你应该:

  • 下载Junit和Hamcrest JAR文件,并将它们存储在应用程序的lib/目录中
  • 在NetBeans中,右键单击项目,选择属性,然后在左侧选择。切换到编译测试选项卡,删除系统范围内的Junit libs,并使用添加JAR/文件夹按钮添加来自lib/目录的libs。

确保已将相关的Ant文件([project]/build.xml[project]/nbproject/build-impl.xml)添加到您的版本控制系统中。

然后只需告诉Jenkins Ant文件的位置(repo中[project]/build.xml的路径),以及要运行的Ant目标(通常是Java SE应用程序的'test jar')。

这种解决方案的优点是,如果您无法(或不想)手动在CI服务器上存储单独的文件,它也可以工作。缺点是,您将libs与应用程序一起发布,而不是使用可能已经在服务器上可用的系统范围内的libs。


0

尝试提供相对于当前目录完整的文件路径, 因此,考虑到您的测试结果在 nbproject 中,当前工作目录为 demo

在发布 JUnit 结果下 写入

nbproject/*.xml

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接