轉載:https://www.cnblogs.com/helloIT/p/5761740.html
1.環境
windows10 專業版
Jenkins 2.7
apache-ant-1.9.6
JDK1.8.0_20
2.整體思路
jdk:支持ant腳本中的編譯、測試等target。
ant腳本:負責java代碼的編譯、JUnit。
Jenkins:調度觸發ant腳本的執行。

3.開始練兵
3.1 項目整體結構

com.java.src下面放源碼 MessageUtil.java
com.java.test目錄下放JUnit測試文件 TestMessageUtil.java
build.xml文件放在根目錄下,即位於AntJunit-v1.0目錄下,和src位於同一級別。
3.2 項目源碼
1 package com.java.src;
2
3 public class MessageUtil {
4 private String message;
5
6 //Constructor
7 //@param message to be printed
8 public MessageUtil(String message){
9 this.message = message;
10 }
11
12 // prints the message
13 public String printMessage(){
14 System.out.println(message);
15 return message;
16 }
17
18 // add "Hi!" to the message
19 public String salutationMessage(){
20 message = "Hi!" + message;
21 System.out.println(message);
22 return message;
23 }
24 }
1 package com.java.test;
2
3
4
5
6 import static org.junit.Assert.*;
7
8 import org.junit.Test;
9
10 import com.java.src.MessageUtil;
11
12 public class TestMessageUtil {
13 String message = "Robert";
14 MessageUtil messageUtil = new MessageUtil(message);
15
16 @Test
17 public void testPrintMessage() {
18 System.out.println("Inside testPrintMessage()");
19 assertTrue(message.equals(messageUtil.printMessage()));
20 }
21
22 @Test
23 public void testSalutationMessage() {
24 System.out.println("Inside testSalutationMessage()");
25 message = "Hi!" + "Robert";
26 assertTrue(message.equals(messageUtil.salutationMessage()));
27 }
28 }
1 <?xml version="1.0" encoding="utf-8"?>
2 <project name="test" default="test" basedir=".">
3
4 <!--配置基本屬性-->
5 <property name="src" value="src"/>
6 <property name="build" value="build"/>
7 <property name="lib" value="lib" />
8 <property name="dist" value="dist"/>
9 <property name="classpath" location="${build}"/>
10
11 <!--配置測試報告的屬性-->
12 <property name="report" value="report"/>
13 <property name="report.xml" value="${report}/junit/xml"/>
14 <property name="report.html" value="${report}/junit/html"/>
15
16 <!--配置運行時classpath-->
17 <path id="classpath.run">
18 <pathelement path="${classpath}"/>
19 <fileset dir="${lib}">
20 <include name="*.jar"/>
21 </fileset>
22 </path>
23
24 <!--配置測試時classpath-->
25 <path id="classpath.test">
26 <path refid="classpath.run"/>
27 <path location="${dist}/lib/test-${DSTAMP}.jar"/>
28 </path>
29
30 <!--任務初始化-->
31 <target name="init" >
32 <tstamp/>
33 <delete dir="${build}"/>
34 <delete dir="${report}"/>
35 <delete dir="${dist}"/>
36 <delete file="${lib}/test-*.jar"/>
37 <mkdir dir="${build}"/>
38 <mkdir dir="${lib}"/>
39 <mkdir dir="${dist}"/>
40 <mkdir dir="${report}"/>
41 </target>
42
43 <!--配置編譯任務-->
44 <target name="compile" depends="init">
45 <javac srcdir="${src}" destdir="${build}">
46 <classpath refid="classpath.run" />
47 </javac>
48 </target>
49
50 <!--配置運行任務-->
51 <target name="run" depends="compile, dist">
52 <java classname="com.test.TestCalculator">
53 <classpath>
54 <path refid="classpath.run"/>
55 </classpath>
56 </java>
57 </target>
58
59 <!--配置JUnit測試,打印測試結果-->
60 <target name="test" depends="compile, dist">
61 <mkdir dir="${report.xml}"/>
62 <mkdir dir="${report.html}"/>
63 <junit printsummary="yes" haltonfailure="no">
64 <classpath refid="classpath.run"/>
65 <formatter type="xml"/>
66 <batchtest fork="yes" todir="${report.xml}">
67 <fileset dir="${src}" includes="**/Test*.java"/>
68 </batchtest>
69 </junit>
70 <junitreport todir="${report.html}">
71 <fileset dir="${report.xml}">
72 <include name="*.xml"/>
73 </fileset>
74 <report format="frames" todir="${report.html}"/>
75 </junitreport>
76 </target>
77
78 </project>
3.3 必要的環境配置
將junit-4.10.jar 復制到%ANT_HOME%\lib目錄下。例如,我需復制到D:\SoftInstall\apache-ant-1.9.6\lib下。
這一步很有必要,否則正式運行會報錯。
3.4 配置Jenkins
新建一個自由風格的job,名字為AntJunit-V1.0。
源碼管理:選擇No。利用SVN或git對源碼進行管理時,Jenkins總是會把代碼拷貝一份到自己的工作空間,然后對備份進行操作,因此本demo忽略源碼管理,直接將代碼拷貝到Jenkins工作區。

增加構建步驟:選擇Invoke Ant。Targets的名字test來自build.xml中的target名字test(test在build.xml中也是默認執行的target)。
另外,這里的構建可以用windows腳本執行。二者效果完全一樣。

構建后操作:選擇Publish JUnit test result report。測試報告xml填:report/junit/html/TESTS-TestSuites.xml 。

點擊「保存」。
4.構建結果

點擊中間的「最新測試結果」,查看詳情:

5.總結
①完全可以在ant環境下調試好結果再放到jenkins工作空間。因為起實質作用的是ant,jenkins僅僅是調度。ant和jenkins天然有着密切的聯系。
②這個demo中ant腳本模擬的是手動編譯、測試java代碼的過程。ant典型應用還有對Java程序的打包、部署等。當然,ant還有更多應用,有興趣的童鞋可以搜索ant學習。
6.致謝
7.在ubuntu14.04下遇到的問題(2016.8.16,jenkins版本為2.7.2)
上述作業在windows下沒有任何問題。但是移植到ubuntu14.04雖然能夠構建,但查看詳情發現報錯:Error Message:org/hamcrest/SelfDescribing 。

原來是由於Junit4.10.jar中不包含hamcrest-core-1.3.jar(參考這里)。
將hamcrest-core-1.3.jar添加到${JENKINS_HOME}/workspace/AntJunit/lib目錄下,重新構建,成功!



