windows10 專業版html
Jenkins 2.7java
apache-ant-1.9.6git
JDK1.8.0_20apache
jdk:支持ant腳本中的編譯、測試等target。ubuntu
ant腳本:負責java代碼的編譯、JUnit。windows
Jenkins:調度觸發ant腳本的執行。yii
3.1 項目總體結構ide
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 。
點擊「保存」。
點擊中間的「最新測試結果」,查看詳情:
①徹底能夠在ant環境下調試好結果再放到jenkins工做空間。由於起實質做用的是ant,jenkins僅僅是調度。ant和jenkins自然有着密切的聯繫。
②這個demo中ant腳本模擬的是手動編譯、測試java代碼的過程。ant典型應用還有對Java程序的打包、部署等。固然,ant還有更多應用,有興趣的童鞋能夠搜索ant學習。
上述做業在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目錄下,從新構建,成功!