阅读文本大概需要3分钟。

最早出现的构建工具是Make,但是Make这个构建工具一般只用在C或者C++语言的构建中,那么Java语言中有哪些常见的构建工具呢?

0x01:Ant+Ivy

        Ant是最早出现的,用于Java项目构建的工具,在很多方面它有些像Make。2000年发布,在很短时间内成为Java项目上最流行的构建工具。它的学习曲线很缓,因此不需要什么特殊的准备就能上手。它基于过程式编程的idea。在最初的版本之后,逐渐具备了支持插件的功能。

       Ant将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具。默认情况下,它的buildfile(xml文件)名为build.xml,每一个buildfile含有一个<project>和至少一个预设的<target>,这些targets包含许多task elements。每个task element有一个用来被参考的id,此id必须是唯一的。

       主要的不足是用XML作为脚本编写格式。XML本质上是层次化的,并不能很好地贴合Ant过程化编程的初衷。Ant的另外一个问题是,除非是很小的项目,否则它的XML文件很快就大得无法管理。后来随着通过网络进行依赖管理成为必备功能,Ant采用了Apache Ivy。

Ant官网

http://ant.apache.org/

ivy官网

https://ant.apache.org/ivy/

0x02:Maven

       Maven发布于2004年。目的是解决码农使用Ant所带来的一些问题。Maven仍旧使用XML作为编写构建配置的文件格式,但是文件结构却有巨大的变化。Ant需要码农将执行task所需的全部命令都一一列出,然而Maven依靠约定(convention)并提供现成的可调用的目标(goal)。不仅如此,有可能最重要的一个补充是,Maven具备从网络上自动下载依赖的能力(Ant后来通过Ivy也具备了这个功能),这一点革命性地改变了我们开发软件的方式。但是Maven也有它的问题。依赖管理不能很好地处理相同库文件不同版本之间的冲突(Ivy在这方面更好一些)。XML作为配置文件的格式有严格的结构层次和标准,定制化目标(goal)很困难。因为Maven主要聚焦于依赖管理,实际上用Maven很难写出复杂、定制化的构建脚本,甚至不如Ant。用XML写的配置文件会变得越来越大,越来越笨重。在大型项目中,它经常什么“特别的”事还没干就有几百行代码。Maven的主要优点是生命周期。只要项目基于一定的规则,它的整个生命周期都能够轻松搞定,代价是牺牲了灵活性。

      另外,Maven也可以被利用与构建和管理各种项目,例如:C#、Ruby、Scala和其他语言编写的项目。Maven曾经是Jakarta项目的子项目,现在已经成为Apache软件基金会主持的独立Apache项目了。Maven项目使用项目对象模型(Project Object Modle,POM)来配置项目,对象模型存储在名为pom.xm的文件中。

Maven官网

https://maven.apache.org/

0x03:Gradle

       Gradle 是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy语言的特定领域语言(DSL语言,所谓的DSL是指这个语言应用在特定的领域,而类似Java这样是DCL语言,可以运用在普通的各个领域)来声明的项目设置,而不是传统的xml语言,当前支持的语言仅限于Java、Groovy、Scala、Kotlin。计划未来支持更多的语言。支持maven、lvy仓库。
过去Java开发者们常用Maven和Ant等工具进行封装部署的自动化,或者两者兼用,不过这两个工具彼此有优缺点,如果频繁改变相依赖包的版本,使用Ant相当麻烦,如果琐碎工作很多,Maven功能不足,而且两者都是使用xm描述的,相当不利于设计if、switch等判断式,即使写了可读性也不佳,Gradle改良了过去Maven、Ant带给开发者的问题,也已经成为Android Studio内置封装部署工具,比如添加项目依赖,发布版本,混淆配置等等。Gradle样板文件的代码很少,这是因为它的DSL被设计用于解决特定的问题:贯穿软件的生命周期,从编译,到静态检查,到测试,直到打包和部署。

官网

https://gradle.org/

       不过现在的项目开发不仅仅依赖这些构建工具这么简单,这些构建工具常常与持续集成平台结合在一起,完成从编译、打包、测试到部署一条龙的工作。目前Java方面常见的持续集成平台主要有:

  • Hudson :Oracle旗下的、用Java编写的持续集成(CI)工具
  • Jenkins :用Java编写的一个开源持续集成工具。该项目是在和Oracle发生争执后的来自于Hudson 的分支

       目前主流的java项目都是使用Maven来管理项目,比较老的项目还是使用Ant来管理,而前卫的一些Java项目则使用Gradle来管理。所以只要掌握Maven就可以解决工作中的90%以上的问题。


每天进步一点点

项目中常用的构建工具_maven