前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >项目中常用的构建工具

项目中常用的构建工具

作者头像
DevOps云学堂
发布2019-10-18 17:19:27
1.4K0
发布2019-10-18 17:19:27
举报
文章被收录于专栏:DevOps持续集成DevOps持续集成

以下文章来源于JAVA乐园 ,作者java乐园

阅读文本大概需要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官网

代码语言:javascript
复制
http://ant.apache.org/

ivy官网

代码语言:javascript
复制
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官网

代码语言:javascript
复制
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被设计用于解决特定的问题:贯穿软件的生命周期,从编译,到静态检查,到测试,直到打包和部署。

官网

代码语言:javascript
复制
https://gradle.org/

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps持续集成 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
持续集成
CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档