(本文第一地址:http://www.cnblogs.com/huangchanghuan/p/6597741.html) html
最近須要使用ant打包項目,在服務器上面部署定時器執行任務,因此記錄這此ant打包項目的過程;java
1.java命令行基礎要熟練(一些參數配置),才能避免ant配置參數不對而產生的bugapache
(配置javac時候,沒有加debug="true",致使jar包運行,日誌中輸出不了類名,只有一個'?'號)服務器
INFO 2017-03-21.23:59:03.505 [?:?] 線程任務成功返回:線程執行完成.工具
2.ant打包項目仍是其餘工具打包,全部項目必須按要求使用jdk版本ui
官方http://ant.apache.org/bindownload.cgi下載新版(目前爲Ant1.10.1)的ant,獲得的是一個apache-ant-1.10.1-bin.zip的壓縮包。將其解壓到你的硬盤上,例如:C:\apache-ant-1.10.1。spa
window中設置ant環境變量:命令行
ANT_HOME C:/ apache-ant-1.10.1線程
path C:/ apache-ant-1.10.1/bindebug
classpath C:/apache-ant-1.10.1/lib
依次:開始->運行->cmd,輸入以下命令:ant
若是出現以下內容,說明安裝成功:
【說明ant安裝成功!由於ant默認運行build.xml文件,這個文件須要咱們創建。】
目標用ant生成sunstar-coupon-1.0.jar, 這個jar能執行JDMessageMonitor.main方法就能夠了(因此後面ant配置文件build.xml只對JDMessageMonitor編譯)
注意ant的配置文件build.xml放在項目根目錄下(通常).
這是簡單的配置,裏面有詳細的註解
<?xml version="1.0" encoding="GBK"?> <!--project 用於定義一個ant工程,其中的三項name、default、basedir缺一不可。 做用分別爲:定義工程名、制定默認執行的任務、以及工程基礎的路徑型(它是計算其它路徑的基礎,通常狀況下使用.即在java工程根目錄便可)--> <project name="coupon" default="jar" basedir="."> <description>easy ant</description> <!--描述,我的以爲就是一提示做用,沒什麼實際用途--> <property name="src" value="src" /><!--定義源文件路徑,其中的value換成location也行,使用value的時候,${src}獲得的就是src這個值,若是使用location,獲得的是src這個目錄的絕對路徑--> <property name="classes" value="ant/bin" /><!--編譯後class文件存放的地方--> <property name="jar_dir_name" value="C:\Users\peter\Desktop\sunstar-coupon-1.0.jar" /> <!--咱們要生成的jar包--> <property name="lib.dir" value="doc"/> <!--其餘引用的jar包存放的位置--> <!--建立任務init,負責初始化一些條件--> <target name="init"> <delete dir="${classes}" /><!--刪掉原有文件夾--> <mkdir dir="${classes}" /><!--從新生成文件夾--> <delete file="${jar_dir_name}" /><!--刪除舊的jar包--> </target> <!--設置classpath,配置引用的jar--> <path id="classpath"> <fileset dir="${lib.dir}"> <include name="*.jar"/> </fileset> </path> <!--建立編譯任務,名字是compile,depends指定了comiple任務依賴init任務--> <target name="compile" depends="init" description="comile target"> <!--javac,編譯,對應java中的javac命令--> <!--srcdir定義源文件路徑--> <!--destdir定義編譯後文件路徑--> <!--includeantruntime做用是指定編譯任務是否包含ant的classpath,無關緊要,不影響編譯--> <!--debug 設置爲true 會把源文件的屬性信息如源文件名稱寫入class文件 ; 若是爲false之後log4j日誌輸出引用類名會找不到變成?號--> <javac srcdir="${src}" destdir="${classes}" debug="true" includes="**/JDMessageMonitor.java" includeantruntime="true"> <classpath refid="classpath"/> <!--前面已經配置的classpath,引入依賴的jar--> </javac> <copy todir="${classes}"><!--把src源文件目錄下的配置文件 , 複製到編譯後的目錄中--> <fileset dir="${src}"> <include name="**/*.xml"/> <include name="**/*.properties"/> </fileset> </copy> </target> <!--打包開始,名字爲jar,依賴任務爲compile--> <target name="jar" depends="compile" description="make jar file"> <jar jarfile="${jar_dir_name}" basedir="${classes}"><!--jar操做,jarfile指定jar包存放路徑,basedir爲編譯後的class的目錄--> <!--爲jar包指定manifest,固然,若是jar包不須要打成runnable的形式,manifest能夠不要--> <manifest> <!--指定main-class--> <attribute name="Main-Class" value="com.sunstar.coupon.monitor.JDMessageMonitor" /><!--java -jar sunstar-coupon-1.0.jar 默認執行com.sunstar.coupon.monitor.JDMessageMonitor.main方法--> <!--指定Class-Path--> <!--<attribute name="Class-Path" value="${libs}">--> <!--</attribute>--> </manifest> </jar> </target> </project> <!--ant.project.name是ant默認的一個變量,值爲最上面定義的project的name ; ${DSTAMP}爲日期,格式爲20111123;${TSTAMP}爲時間,格式爲2256,表示22點56分。-->
根目錄(便是build.xml所在目錄),輸入ant,回車
我在build.xml中配置生成jar的路徑是電腦桌面
<property name="jar_dir_name" value="C:\Users\peter\Desktop\sunstar-coupon-1.0.jar" /> <!--咱們要生成的jar包-->
sunstar-coupon-1.0.jar裏面的結構就是咱們編譯後生成的目錄結構,沒有包含其餘依賴的jar包,因此咱們把sunstar-coupon-1.0.jar和全部依賴jar放在同一個文件夾中:
而後執行:java -cp "./sunstar-coupon-1.0.jar;./*" com.sunstar.coupon.monitor.JDMessageMonitor
(注意命令中-cp參數,必須把sunstar-coupon-1.0.jar放前面,保證先在sunstar-coupon-1.0.jar中找配置文件)
執行成功!!!