Context:

一般java开发都是用的Eclipse等的IDE,创建项目后文件的结构就有了,比如src,bin,res,libs目录、包名等了;运行点击run as就ok;依赖第三方jar包放到libs下,然后加到class路径里。

然而这背后是怎么实现的呢?如果我想定制这个流程呢?就比如我们的APP,A项目依赖于B项目打包后生成的插件,运行时必须把以前手机目录下的B项目jar包删掉,才会用新的。然后每次手动 B项目签名、A项目运行、删除手机缓存的jar包、运行A项目,一次无所谓,一天来个几十次,就让人疯了。

我就想怎么定制呢?然后就看了构建工具.


共同点:


这三种都是JAVA常用的构建工具,从Ant、Maven、Gradle依次演化。

构建:1.编译源代码-----》2.拷贝class文件到指定目录----》3.组装构件

然后我以构建工具认可的形式,控制这个流程。比如生成class到指定目录、java文件源码放在那里。


不同点:

Ant:


优点:使用XML语言来表达构建过程,有层次性,而且很灵活。

缺点:没有默认值,每个人的构造可能都不一样。我是把class文件生成到gen文件夹下,你可能是生成到bin下。而且缺乏依赖管理,比如用的Gson等第三方库还得自己下载,为了弥补这个引入了Ivy。xml用来表示逻辑的话就崩溃了。构建脚本默认名称是build.xml

<target name ="init">
		<mkdir dir="build'/>
	</target>
	<target name="compile" depends="init">	
		<javac srcdir="src" destdir="build"/>
	</target>




Maven:

优点:有默认的配置,项目的布局了src/main/java...;有版本管理, 如Maven仓库,只要写组织名、工件(比如jar包)名和版本 就可以自己下载。(所以国内有事很坑爹,Android有的仓库被天朝封锁,就下不来工件了)

缺点:难以定制,要自己写什么插件

下面....表示省略掉了,

<project xmls="http://......."
			....>
		<modelVersion>4.0.0</...>
		<groupId>com.mycompany.app</...>
		....
		<dependencies>
			<dependency>
			<groupId>junit..
			<artifact>junit...
			<version>4.11...
			<scope>test...
		...


Gradle:

优点:在Ant的灵活配置和Maven的约定之间取到了一个平衡。采用Groovy脚本语言,可以完全使用Java的语法和类。版本管理上只要写库的表示,就可以自己下载。构建脚本名默认是build.gradle。完美的兼容Maven和Ant已有的构建文件。

apply plugin:‘java'
		...
		dependencies{
		testCompile 'junit:junit:4.11'
		}



而且groovy语法简直就是碉堡了,这里就不介绍了。