接手一个2012年的java项目,没有maven也没有gradle,根目录躺着一个build.xml,里面全是target和task。开始有点懵,后来发现跑构建就一条命令,ant后面跟个目标名,比想象中简单。
apache ant是个基于XML的构建工具,比maven早,靠一份build.xml描述编译、打包、拷贝这些动作。它不负责管依赖,这个特点既是缺点也是优点,很多老企业系统还在用。
build.xml里到底写了什么
顶层是project标签,里面一个target就是一个可执行的任务,比如clean、compile、dist。target之间可以写depends,形成先后关系。一个典型流程是先clean删掉旧的classes,再compile编译,最后dist打包成jar。执行ant dist,它会顺着依赖把前面的都跑一遍。
ant compile 编译 ant clean 清理 ant dist 打包 ant -p 列出所有目标 ant -buildfile build.xml dist 指定文件property标签用来定义变量,比如源码目录src、输出目录build,用美元符号加大括号引用,改路径只改一处。fileset配合javac可以一次编译一批文件,比写死文件列表灵活。
和maven比,差在哪好在哪
- 依赖管理:ant不自动下依赖,得手动把jar放进lib,maven自动搞定
- 约定:ant没有固定目录结构,全靠自己写,maven有统一约定
- 灵活度:ant几乎什么都能干,写脚本式任务,特殊构建很合适
- 上手成本:ant要自己搭骨架,maven开箱即用,新人更爱后者
现在新项目基本用maven或gradle,但ant没被淘汰。有些构建需要调用命令行工具、做文件搬运、跨环境部署,ant写起来反而直接。还有些遗留系统改构建脚本风险大,维持ant最省事。
取舍清楚。新项目选maven或gradle,生态好依赖省心。老项目别急着换,除非依赖已经乱到没法维护,否则继续ant加个ivy管依赖就够用了。