maven、gradle、ant 三者都可用作项目构建,其中maven和gradle还可用作项目依赖管理。由于项目依赖管理比较简单,本文主要介绍 maven、gradle、ant 三者作为项目构建工具的用法。
Apache Ant
Apache Ant 是一个java编写的项目构建工具,所以具有很好的跨平台性,它不仅仅用在java项目中。使用 Apache Ant 可以讲项目的 编译、测试、部署等步骤 联系起来,自动化执行。
Apache Ant 在项目的根目录下定义 build.xml 文件,在文件中定义多个 target ,通过执行target来完成一些任务,执行一些操作,其中有许多内置任务可以直接使用,编写比较方便灵活。如下build.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<project name="02-ant" basedir="." default="help">
<property name="src" value="src" />
<property name="classes" value="bin" />
<path id="classpath">
<pathelement path="${classes}" />
</path>
<target name="compile" description="编译">
<delete dir="${classes}" />
<mkdir dir="${classes}" />
<javac srcdir="${src}" destdir="${classes}" debug="true" includeantruntime="false">
<classpath refid="classpath" />
</javac>
</target>
</project>
如果在此文件所在的目录执行 ant complie 命令,就是执行了文件中定义的compile(编译)的这个target。其中这个target会执行以下任务:
- delete 删除classes目录中的内容
- 创建一个新的classes文件夹
- 编译src目录中的java文件,讲编译结果放在classes文件夹下
通过以上的三个内置的任务,完成了java项目的编译过程。即完成了一个target。
<target name="build" description="打包" depends="compile">
<delete dir="${output}" />
<mkdir dir="${output}" />
<jar destfile="${output}/app.jar" basedir="${classes}" includes="**/*.class">
<manifest>
<attribute name="Main-Class" value="Program"/>
<attribute name="Class-Path" value="${classes}"/>
<attribute name="classpath" value="${classes}"/>
</manifest>
</jar>
</target>
以上代码 为一个 打包的target,这个target依赖于compile,即在执行这个target之前,会自动执行compile。
诸如以上的示例,我们可以使用这些内置的任务来组成不同的target,通过执行target就可以完成的编译、打包、运行、部署等项目构建目标。
更多 Apache Ant内置任务请参考:
Apache Maven
Apache Maven 主要用作项目依赖管理和项目构建。
Apache Maven 项目依赖管理主要通过中央仓库存储jar包,在项目的 pom.xml 文件中 <dependencies> 标签下可添加jar包的坐标,maven会自动下载依赖。
Apache Maven 项目构建主要通过 maven 的标准生命周期来完成。由于maven生成项目的文件夹结构相对固定,所以在执行maven的生命周期命令时,一般不需要指定生成文件(编译、打包文件)的位置。
其中maven常用的生命周期如下:
- clean : 清理 target 文件夹
- compile : 编译java文件,放在target/classses文件夹下
- package : 将.classes 文件打包成jar包
- install : 将jar包安装在本地的maven仓库
- deploy : 将jar包发布在远程maven仓库
Gradle Build Tool
Gradle 也是一个项目依赖管理和项目构建的工具,gradle在项目根目录使用groovy语言编写一个build.gradle文件,这个文件中可以添加项目的依赖和项目的构建任务。
依赖管理和项目构建类似于maven, 而构建任务也可以简单地自定义,这样增加了项目构建的灵活性。
具体完整的示例参考: