以前开发android或者java,直接只使用本地文本,以及编译工具就可以了。
但是随着需求越来越多,越来越变态(eg:依据手机壳改变主题颜色)
,许多代码可以封装成一个库,或者框架了。然后分享的人越来越多。
需要添加第三方库,开始是直接放入一个目录中,比如lib,然后配置编译路径时,把库文件路径配置好,然后用编译打包工具生成最终产物。
再到后来发现,每次都要手动去调用编译很麻烦,于是一个叫ant构建工具和maven项目管理出现了。
ant:
它把你想做的事情自动化,不用你手动一步一步做,因为里面内置了javac、java、创建目录、复制文件等功能,所以可以直接点击Ant文件,即可编译生成你的项目。而且还能跨平台。
maven:
Maven除了具备Ant的功能外,还增加了以下主要的功能:
使用Project Object Model来对软件项目管理;
内置了更多的隐式规则,使得构建文件更加简单;
内置依赖管理和Repository来实现依赖的管理和统一存储;
内置了软件构建的生命周期;
区别:
Maven 拥有约定,只要遵守约定,它就知道你的源代码在哪里。
Maven 是声明式的。
你需要做的只是创建一个 pom.xml 文件然后将源代码放到默认的目录。
Maven 会帮你处理其它的事情。
Maven 有一个生命周期,当你运行 mvn install 的时候被调用。
这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。缺点是运行许多默认目标。
ant没有约定,项目生命周期,它是命令式的。
所有操作都要手动去创建、布置。
甚至连build.xml文件都需要手动创建。
比如ant使用的自定义task:
build.xml
<taskdef name="MyCopy" classname="org.tools.SimpleTask" classpath="bin"></taskdef>
<target name="mycopy">
<MyCopy file="2.txt" tofile="output.txt"/>
</target>
maven的项目管理:
<groupId>com.dodonew</groupId>
<artifactId>springmvc</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>springmvc</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- spring日志依赖 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
</dependencies>
终上所诉发现,需要xml编写配置,深涩难懂,而且还要记住规范。那么有没有简单一点的呢,于是gradle出现了。
我们来看一下引入依赖库:
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation files('libs/libammsdk.jar')
testImplementation "junit:junit:4.12"
}
简单明了,管理起来也很方便。
而且也持支自定义任务。
Gradle 是以 Groovy 语言为基础,面向Java应用为主,基于DSL语法的自动化构建工具。
比Ant和Maven强大的多。
使用易懂的DSL语法 ,将开发过程中需要的编译、构建、测试、打包以及部署工作,变得非常简单、而且方便重复使用。而且,最重要的是,在Gradle中,你可以根据需要定义自己的model,不像maven中xml已经限制了你所用的model。
特点:
1.依赖管理 :
代码量更少,阅读方便。
2.Task任务:
和Ant类似,Gradle也使用task作为最小的运行单元。
ant中task的定义
<?xml version=”1.0″?>
<project name=”foo”>
<target name=”hello”>
<echo>Hello World</echo>
</target>
</project>
gradle写法:
task hello << {
println “Hello World”
}
仅仅一行的“Hello World"而言,二者看起来差不多。不过试想一下,Ant是使用定义好的task来做要做的事情,而Gradle则是使用Groovy动态脚本来实现,只要你熟悉Groovy,就可以在构建脚本中做任何想做的事情。
3. 灵活性
对于Ant或者Maven,一般使用XML或者插件来定义构建,由于XML本身的缺陷(复杂,不易阅读,只能描述数据而不是流程),在复杂的项目中,维护XML的配置简直就是噩梦。相反,Gradle的构建是使用groovy脚本语言来定义,因此可以灵活的在构建中使用Groovy的代码,而不仅仅是受限与XML的单一模型。
task time << {
int hours = new Date().hours
switch (hours) {
case 0..11:
println ” Good Morning! It’s ${hours}am.”
break
case 12..17: // noon to 5pm
println ” Good Afternoon! It’s ${hours > 12 ? hours – 12 : hours}pm.”
break
default: // 6pm to 11pm
println “Good Evening! It’s ${hours – 12}pm. Shouldn’t you be going home?”
}
}
4.扩展性
依赖Groovy的动态性,Gralde能够写出基于DSL的代码,对于复杂的项目而言,很容易维护。
另外,Gradle也支持插件机制,目前已经有很多Gradle的可用插件,像Java, War, Jetty等,使用起来非常方便。
5.社区支持
Gradle的发展离不开社区的支持。目前,很多著名的开源组件,像Hibernate,Spring等都开始使用Gradle作为自动化构建工具。
这篇文章阐述了Hibernate的作者为什么放弃maven,而转投Gradle:
另外,Gradle的官方网站也提供了非常详细的文档和例子,很容易入门 。
整体而言,Gradle的优势已经越来越明显。如果是新起的项目,不要犹豫,直接上Gradle吧,绝对有不一样的体验。