gradle和maven区别

原文连接:http://blog.csdn.net/jueane/article/details/50383431

---------------------------------------------

Gradle和Maven都是项目自动构建工具,编译源代码只是整个过程的一个方面,更重要的是,你要把你的软件发布到生产环境中来产生商业价值,所以,你要运行测试,构建分布、分析代码质量、甚至为不同目标环境提供不同版本,然后部署。整个过程进行自动化操作是很有必要的。

整个过程可以分成以下几个步骤:

  • 编译源代码
  • 运行单元测试和集成测试
  • 执行静态代码分析、生成分析报告
  • 创建发布版本
  • 部署到目标环境
  • 部署传递过程
  • 执行冒烟测试和自动功能测试
如果你手工去执行每一个步骤无疑效率比较低而且容易出错,有了自动化构建你只需要自定义你的构建逻辑,剩下的事情交给工具去完成。

虽然两者都是项目工具,但是maven现在已经是行业标准,Gradle是后起之秀,很多人对他的了解都是从android studio中得到的,Gradle抛弃了Maven的基于XML的繁琐配置,众所周知XML的阅读体验比较差,对于机器来说虽然容易识别,但毕竟是由人去维护的。取而代之的是Gradle采用了领域特定语言Groovy的配置,大大简化了构建代码的行数,比如在Maven中你要引入一个依赖:
<properties><kaptcha.version>2.3</kaptcha.version></properties>
<dependencies><dependency><groupId>com.google.code.kaptcha</groupId><artifactId>kaptcha</artifactId><version>${kaptcha.version}</version><classifier>jdk15</classifier></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency></dependencies>

然后我将其转换成Gradle脚本,结果是惊人的:

dependencies {compile('org.springframework:spring-core:2.5.6')compile('org.springframework:spring-beans:2.5.6')compile('org.springframework:spring-context:2.5.6')compile('com.google.code.kaptcha:kaptcha:2.3:jdk15')testCompile('junit:junit:4.7')
}
注意配置从原来的28行缩减至7行!这还不算我省略的一些父POM配置。依赖的groupId、artifactId、 version,scope甚至是classfier,一点都不少。较之于Maven或者Ant的XML配置脚本,Gradle使用的Grovvy脚本杀伤力太大了,爱美之心,人皆有之,相比于七旬老妇松松垮垮的皱纹,大家肯定都喜欢少女紧致的脸蛋,XML就是那老妇的皱纹。

Gradle给我最大的有点是两点。其一是简洁,基于Groovy的紧凑脚本实在让人爱不释手,在表述意图方面也没有什么不清晰的地方。其二是灵活,各种在Maven中难以下手的事情,在Gradle就是小菜一碟,比如修改现有的构建生命周期,几行配置就完成了,同样的事情,在Maven中你必须编写一个插件,那对于一个刚入门的用户来说,没个一两天几乎是不可能完成的任务。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS开发提问题

1、打造最受企业欢迎的iOS开发者&#xff1a; 一直都存在的问题&#xff0c;什么样的员工最受企业欢迎&#xff1f;一直也有人在努力提升自己&#xff0c;成为受企业欢迎的员工然而&#xff0c;我们应该往方向去提升自己呢&#xff1f;88家知名企业今年来iOS面试题合集&#xf…

maven引用公共包_使用github作为maven仓库存放发布自己的jar包依赖 实现多个项目公共部分代码的集中,避免团队中多个项目之间代码的复制粘贴...

使用github作为maven仓库存放发布自己的jar包依赖 实现多个项目公共部分代码的集中&#xff0c;避免团队中多个项目之间代码的复制粘贴。1、首先在本地maven位置的配置文件setting.xml(没有该文件就新建这个文件)中&#xff0c;添加配置maven仓库的地址。我用的是我的GitHub仓库…

Gradle笔记——Gradle的简介与安装

原文连接&#xff1a;http://blog.csdn.net/maosidiaoxian/article/details/40109337 gradle专栏 ----------------------------------------- Gradle 安装 1&#xff0c;安装JDK&#xff0c;并配置JAVA_HOME环境变量。因为Gradle是用Groovy编写的&#xff0c;而Groovy基于JA…

WPF之鼠标滑动切换图片

原文:WPF之鼠标滑动切换图片在网上找了一会儿也没找到我想要的效果&#xff0c;还是自己动手&#xff0c;丰衣足食吧。 需求&#xff1a;当前面板中只显示一张图片&#xff0c;图片栏的下部有用来显示当前图片处于图片队列中的位置的圆球&#xff0c;并且点击下部栏内的圆球可以…

CPU的核心数、线程数的关系和区别

原文地址&#xff1a;http://blog.csdn.net/yu132563/article/details/45222935 ------------------------------------- 我们在选购电脑的时候&#xff0c;CPU是一个需要考虑到核心因素&#xff0c;因为它决定了电脑的性能等级。CPU从早期的单核&#xff0c;发展到现在的双核…

mysql in 子查询优化_mysql in 子查询 容易优化

mysql in 子查询 简单优化 大数量下&#xff0c;不要使用 in 嵌套子查询&#xff0c;性能很差&#xff0c;很容易卡死。 ? 简单调整方式如下&#xff1a; select uid,nick_name from uc_users where uid in(select fid from uc_follow where uid#uid#) ? 可拆解成&#xff1a…

谷歌浏览器插件入门示例

2019独角兽企业重金招聘Python工程师标准>>> 实现&#xff1a;任何网址实现图片下载和获取当前域名的cookies的json字符串。 图片下载是给小白用的&#xff0c;可以选中批量下载&#xff0c;获取cookies 是为了方便程序员调试用。 获取cookies: git地址&#xff1a;…

Fiddler中response乱码的解决方案

原文连接&#xff1a;http://blog.csdn.net/quiet_girl/article/details/50577828 ---------------------------------------------------------- 有时候我们看到Response中的HTML是乱码的&#xff0c; 这是因为HTML被压缩了&#xff0c; 我们可以通过两种方法去解压缩。 解决…

线程带来的风险

线程安全性问题 多线程环境下 多个线程共享一个资源对资源进行非原子性操作。 以上三者都存在就会发生线程安全性问题 如文中的卖火车票问题&#xff1a;http://blog.csdn.net/zengmingen/article/details/53217229 原因是&#xff1a;一行java代码转成.class字节码文件后是…

vue内引入语音播报功能

为什么80%的码农都做不了架构师&#xff1f;>>> 在vue项目中引入语音播报&#xff0c;使用的科大讯飞语音接入&#xff0c; 具体思路为每次接收到语音信息后存入一个数组&#xff0c;然后监听这个数组&#xff0c;开始冲第一个索引播放&#xff0c;并且同时根据vue…

php mysql 排序规则_php 数组排序以及按照某个字段排序

如果你已经使用了一段时间PHP的话&#xff0c;那么&#xff0c;你应该已经对它的数组比较熟悉了——这种数据结构允许你在单个变量中存储多个值&#xff0c;并且可以把它们作为一个集合进行操作。经常&#xff0c;开发人员发现在PHP中使用这种数据结构对值或者数组元素进行排序…

单例问题与线程安全

饿汉式 没有线程安全性问题 懒汉式 public class SingletonDemo2 {private static SingletonDemo2 instance;private SingletonDemo2() {}public static SingletonDemo2 getInstance() {if(instancenull) {instancenew SingletonDemo2();}return instance;}}如果遇到多线程。上…

python 音速_中国大学MOOC的APP(慕课)2021用Python玩转数据章节答案

在高技术战争件下,信息的获取相当于人的感觉器官,信息的传输相当于人的神经网络,信息的处理相当于人的大脑,( )则将它们联系为一个整体,构成了作战的神经系统。车身可拆卸的连接有螺纹连接、卡口链接、铰链连接。在高技术战争件下,信息的获取相当于人的感觉器官,信息的传输相当…

Mysql中的触发器

原文地址&#xff1a;https://www.cnblogs.com/zyshi/p/6618839.html ---------------------------------------------------------什么是触发器 简单的说&#xff0c;就是一张表发生了某件事&#xff08;插入、删除、更新操作&#xff09;&#xff0c;然后自动触发了预先编写好…

一张图理解JS的原型(prototype、_proto_、constructor的三角关系)

注意&#xff1a;前方高能预警&#xff0c;请认真仔细看完&#xff0c;阅读完后自己再次画下原型图&#xff0c;相信你一定会有更深刻的认识。(推荐炒鸡好用的画流程图的软件ProcessOn)构造函数&#xff1a;function Foo ( ) { };实例对象&#xff1a;let f1new Foo;let o1new …

Oracle触发器和MySQL触发器之间的区别

原文链接&#xff1a;http://blog.csdn.net/a19881029/article/details/37820363 -----------------------------------------------------------Oracle触发器格式&#xff1a;[plain] view plaincopyCREATE [OR REPLACE] TRIGGER trigger_name BEFORE|AFTER INSERT|UPDA…

下列选项中不符合python语言变量命名规则的是_学习Python第二日--基本概念和类型...

编程语言分类:解释型语言和编译型语言。解释型语言不会产生额外的文件,运行时一行一行的翻译。编译型语言需要产生一个额外的文件,是电脑能够识别的内容,运行后将产生额外的文件。 变量是可变的量,是它的值可以发生改变。变量的作用是保存值,保存的值可以是数据,而且保存…

HashMap死锁原因及替代方案

原文链接&#xff1a;http://blog.csdn.net/fhzaitian/article/details/51505516 ------------------------------------------------------------------------1、首先我们需要简单地了解一下HashMap数据结构 HashMap通常会用一个指针数组&#xff08;假设为table[]&#xff09…

优化mysql数据库_MySQL数据库十大优化技巧

WEB开发者不光要解决程序的效率问题&#xff0c;对数据库的快速访问和相应也是一个大问题。希望本文能对大家掌握MySQL优化技巧有所帮助。1. 优化你的MySQL查询缓存在MySQL服务器上进行查询&#xff0c;可以启用高速查询缓存。让数据库引擎在后台悄悄的处理是提高性能的最有效方…

跋山涉水——深入 Redis 字典遍历

Redis 字典的遍历过程逻辑比较复杂&#xff0c;互联网上对这一块的分析讲解非常少。我也花了不少时间对源码的细节进行了整理&#xff0c;将我个人对字典遍历逻辑的理解呈现给各位读者。也许读者们对字典的遍历过程有比我更好的理解&#xff0c;还请不吝指教。一边遍历一边修改…