(本文第一地址:http://www.cnblogs.com/huangchanghuan/p/6597741.html)
最近需要使用ant打包项目,在服务器上面部署定时器执行任务,所以记录这此ant打包项目的过程;
1.java命令行基础要熟练(一些参数配置),才能避免ant配置参数不对而产生的bug
(配置javac时候,没有加debug="true",导致jar包运行,日志中输出不了类名,只有一个'?'号)
INFO 2017-03-21.23:59:03.505 [?:?] 线程任务成功返回:线程执行完成.
2.ant打包项目还是其他工具打包,所有项目必须按要求使用jdk版本
一、安装ant
官方http://ant.apache.org/bindownload.cgi下载新版(目前为Ant1.10.1)的ant,得到的是一个apache-ant-1.10.1-bin.zip的压缩包。将其解压到你的硬盘上,例如:C:\apache-ant-1.10.1。
二、配置环境变量
window中设置ant环境变量:
ANT_HOME C:/ apache-ant-1.10.1
path C:/ apache-ant-1.10.1/bin
classpath C:/apache-ant-1.10.1/lib
三、验证ant安装成功(如果验证不通过,请按前面步骤检查)
3.1进行如下操作验证:
依次:开始->运行->cmd,输入如下命令:ant
如果出现如下内容,说明安装成功:
【说明ant安装成功!因为ant默认运行build.xml文件,这个文件需要我们建立。】
3.2查看版本:ant -version
3.3如果验证不成功,请仔细检查环境配置.
四.ant实例
4.1项目结构
目标用ant生成sunstar-coupon-1.0.jar, 这个jar能执行JDMessageMonitor.main方法就可以了(所以后面ant配置文件build.xml只对JDMessageMonitor编译)
注意ant的配置文件build.xml放在项目根目录下(一般).
4.2项目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分。-->
4.3执行与结果
4.3.1 在项目的根目录下,打开cmd,执行ant;
根目录(即是build.xml所在目录),输入ant,回车
4.3.2 ant执行结果截图与说明
我在build.xml中配置生成jar的路径是电脑桌面
<property name="jar_dir_name" value="C:\Users\peter\Desktop\sunstar-coupon-1.0.jar" /> <!--我们要生成的jar包-->
4.3.2 命令行运行sunstar-coupon-1.0.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中找配置文件)
执行成功!!!