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语法简直就是碉堡了,这里就不介绍了。