使用Ant自动化我们的java项目生成
现在我们已经了解如何定义属性、依赖关系以及如何运行ant,接下来我们将学习怎样使用ant编译java源代码并生成jar文件。
编译源代码
由于Ant的主要目标就是生成java应用程序,它内置了javac任务来调用java的编译器。此任务一般定义如下
<javac srcdir=”src” destdir=“build”/>
Ant会寻找src目录下所有以.java为扩展名的所有文件,并对他们调用javac编译器,从而在build目录下生成class文件。Javac任务不仅会编译需要编译的源文件,如果某个类文件已经存在,但是对应的源代码文件自从该类文件生成后没有改过,则不会重新编译此源代码文件。
创建jar文件
在编译java源文件之后,通常会将其归档打包为一个jar文件。Jar任务通常如下定义
<jar destfile=”wufengtinghai.alm.jar” basedir=”build”/>
此任务将创建一个wufengtinghai.alm.jar文件,并将build下的所有文件打包到此jar文件中。如果没有指定清单文件,Ant则会生成一个基本的清单文件。Manifest属性允许制定一个清单文件,同时也可以使用manifest任务定义清单文件。

<jar destfile="wufengtinghai.alm.jar" basedir="classes"> <manifest> <attribute name="Built-By" value="${user.name}"/> <attribute name="project" value="wufengtinghai.alm"/> </manifest> </jar>
生成时间戳
在生成环境中使用当前时间和日期,可以以此种方式标记某个生成何时生成输出的。Ant提供了简单易用的tstamp任务可以完成这个功能。这个任务通常在生成过程开始时调用。Tstamp不产生任何的输出;相反,它会根据当前系统时间和日期设置Ant的相关属性。
DSTAMP:设置为当前日期,默认格式为yyymmdd,例如20150606
TSTAMP:设置为当前时间,默认格式为hhmm,例如1020
TODAY:设置为当前日期,带完整的月份,例如2015年6月6日
那我们可以将我们的jar文件定义为如下
<jar destfile="lucene-${DSTAMP}.jar" basedir="classes"/>
最终我们的生成文件autobuildjava.xml如下

<?xml version="1.0"?> <project default="dist" name="autobuildjava" basedir="../"> <description>A simple auto build Java project</description> <property name="srcDir" location="src" /> <property name="buildDir" location="build" /> <property name="distDir" location="dist" /> <target name="init"> <tstamp /> <mkdir dir="${buildDir}" /> <mkdir dir="${distDir}" /> </target> <target name="compile" depends="init"> <javac srcdir="${srcDir}" destdir="${buildDir}" /> </target> <target name="dist" depends="compile"> <jar destfile="${distDir}/wufengtinghai.alm-${DSTAMP}.jar" basedir="${buildDir}"> <manifest> <attribute name="Built-By" value="${user.name}" /> <attribute name="project" value="wufengtinghai.alm" /> </manifest> </jar> </target> <target name="clean"> <delete dir="${buildDir}" /> <delete dir="${distDir}" /> </target> </project>
执行生成控制台输出如下
生成的jar文件和清单文件如下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现