Gradle – Maven的观点

正如我博客的读者所知道的, 我有点像Maven迷 。 我从2007年8月左右开始使用Maven,从没有回过头。 但是,就像其他所有情况一样,“变化是唯一不变的”。 现在这个领域还有其他参与者,Gradle看起来是最有前途的。 我决定试一试,并在本文中分享了我的发现/学习的要点(当然,一篇文章只能勉强刮伤表面,但这仍然是一个开始)。 如果您从事基于Java的项目,并使用Maven,则可能会发现这篇文章有趣。

什么是Gradle?

Gradle将自己介绍为企业自动化工具。 从我到目前为止所看到的,我倾向于同意,它的确似乎勾勒了旨在成为该框架的所有框框。 然而,这是一个有点的宏伟目标 ,salesy谈话。 拥有一个很好的目标(例如,尝试成为企业自动化工具),但我个人认为这是一个雄心勃勃,而不是现实。

从Java技术专家的角度来看,消除雄心和销售投入-Gradle(看起来像)Swift成为处理Java项目的所有构建和发布相关活动的好工具。

Maven对我来说很好。

是的,它确实。 我与一些相当大的企业一起工作,说实话,即使他们将所有Java项目都放在Maven上,他们也将取得长足的进步。 因此,就我个人的经验而言,在一家正规公司中,出于所有实际目的,Maven不仅足够好,而且如果得到正确和广泛的使用,也将是一个巨大的飞跃。

话虽这么说,虽然企业拥有使用工具和技术安全运行的奢侈品(甚至确实有这种需求),但我们的技术专家并不拥有奢侈品。 当工具/技术/框架证明自己很勇敢时,企业可以聘请知道这些工具(有时甚至是流行语)的顾问,而那些没有花费足够的精力来保持更新的技术专家可能会发现自己正在努力跟上。 诀窍是要知道哪些技术可以投入时间,哪些时间不可以。

至于Gradle,它设法吸引了一些真正令人印象深刻的顾客。 Spring人们已经将Spring核心转移到Gradle。 休眠的人详细记录了他们继续学习Gradle的原因。 Grails的人似乎对 Gradle 有强烈的意见 。

我不会尝试争取Gradle的好处。 首先,我对该工具还不了解。 其次,我已经分享的链接来自一些相当著名的公司,它们与相当成功的技术公司合作,并且他们在整合Gradle的好处方面做得很好。

我的简单总结是

  1. Gradle允许您在Groovy中编写代码。 因此,无论您希望构建和发布脚本做什么,您都可以编写几乎任何代码。
  2. Gradle-有机会向像Maven这样的先行者学习-似乎一开始就解决了一些问题。 处理多个模块,使用多个源文件夹等都是很好的例子。
  3. 只要Maven不在身边,就意味着支持有些粗略。 的
    我使用的STS插件肯定有一些粗糙之处。
  4. 由于您可以编写几乎任何所需的代码,因此轻松射击自己也很容易。 如此灵活-我认为对于企业来说,使用Gradle进行标准化的构建和发布跨项目将是一个艰难的时期。

所以,你去了。 两点赞成,两点反对。 相当平衡。 这足以使我感兴趣。 如果您也很感兴趣,请继续阅读。

那么,我该如何开始?

我建议您先为几个链接添加书签。 Gradle 主页 , 下载页面 , 相关工具列表。 电子书《 使用Gradle进行构建和测试 》。 完全值得注册。 我推荐它。 最后,您将在Gradle中花费更多的时间后,可以更好地理解Gradle用户指南 。

因此,继续下载最新版本。 我已经获得了1.3版。 解压缩并将其放在您喜欢的任何位置。 我通常将此类工具(基于Java的工具)转储到C:\ ProgramFiles(注意Program-?-Files之间缺少的空间)。 因此,对于本文,我有一个C:\ ProgramFiles \ gradle-1.3文件夹,其中包含我们刚刚下载的所有Gradle糖果。

我们需要稍微调整gradle.bat文件。 在批处理文件的开头添加一个JAVA_HOME。 Gradle需要有权访问机器的Java安装。 保留文件的其余部分。

文件:C:\ ProgramFiles \ gradle-1.3 \ bin \ gradle.bat

SET JAVA_HOME=C:\ProgramFiles\Java\jdk1.7.0_09
...
@if '%DEBUG%' == '' @echo off ...
...

现在,只是为了测试您是否已将正确的东西连接在一起,请创建一个批处理文件。 它只是一行,因此您可以在命令提示符下键入它。 但是我倾向于将其放入批处理文件中,因为稍后我倾向于在其中添加更多内容。

文件:C:\ ProgramFiles \ gradle-1.3 \ bin \ GradleCommands.bat

gradle -v

如果运行此批处理文件,您将看到Gradle宣布其版本。 如果您现在和我在一起,那么您的机器上可以运行香草Gradle。 恭喜你 但是,对于您的大多数实际目的而言,这还不够。 让我们对工具进行更多的介绍 。

我不再使用Eclipse。 STS确实做得非常好,我已经使用了几年了。 幸运的是,还有一个用于STS的Gradle插件 。 安装过程有详细记录,在此不再赘述。 但是,安装过程无法传达出它并不是那么简单。 我在两台不同的机器上尝试过它,不得不经历了好几次,才能使它起作用。 我的建议是不要在Eclipse / STS的工作安装中尝试它,除非您有能力将其破坏几个小时。 制作另一个STS实例并进行处理。 您的毅力将通过STS中的新Gradle导入功能(以及其他一些功能,我们将在后面进行检查)得到回报。

最后一件事–在继续之前,请在STS中打开“首选项”,并将Gradle设置为C:\ ProgramFiles \ gradle-1.3文件夹。 我想确保STS只是在运行香草Gradle,而没有其他任何操作。 如果需要,我可以退出STS并在命令提示符下键入相同的命令,并确保得到相同的结果。 我喜欢从编辑器执行操作,但是鄙视被锁定。完成后,您需要导入一个基于Java的项目(使用Gradle)。

如何创建基于Gradle的Java项目以导入STS?

这是乐趣开始的地方。 只需创建一个文件夹(我将其称为gradle001)。 在其中放入一个build.gradle文件。 现在,这就是STS导入它所需的全部。 build.gradle中包含一些理论。 我现在不会研究它。 让我们看看下面的build.gradle文件。

文件:/gradle001/build.gradle

apply plugin: 'java'def localMavenRepo = 'file://D:/mavenrepo'
repositories {mavenCentral()maven { url= localMavenRepo }
}sourceCompatibility = 1.7
version = '1.0-SNAPSHOT'
group = 'foo.bar.gradle'dependencies {testCompile 'junit:junit:4.11'
}

您现在看到有趣的部分了吗? 尽管我没有在文件中添加任何注释,但是您能猜出大多数说明是什么意思吗? 我希望你们大多数人都能。 大家知道,我一直在使用Maven,本地存储库保存在D:/ mavenrepo。 使用Gradle,我可以重用该本地存储库,也可以使用Maven中央存储库。 从我的角度来看,Gradle不能与Maven友好,我喜欢Gradle尽力使开发人员的生活变得更加轻松。

现在,我们将启动STS(使用Gradle)并导入“新的Gradle项目”,然后在其中导入刚刚创建的文件夹结构。 如果一切正常,您将在STS的“项目浏览器”视图中很好地看到该项目。 我的个人经历对此有些粗略。 我必须尝试几次,然后才能使用它。 但是,一旦导入成功,事情就会变得更加顺利。

Maven曾经通过虚拟主类和测试类为我提供了更完整的项目。

是。 Maven曾经为您“创建”一个项目,您可以从许多模板(原型)中选择一个来创建您的项目结构。 las,我找不到Gradle的类似功能(正如我在本文开头承认的那样,我是此工具的新手,因此,如果我缺少任何内容,请告诉我。请发表评论)。

事实上,没有为您创建任何虚拟项目。 但是,工具的强度(例如Gradle)不是那样。 我们已经看到读取build.gradle很容易。 现在,让我们编写一些虚拟代码,亲自了解Gradle可以为我们做些什么。

文件:/gradle001/src/main/java/foo/bar/AppMain.java

package foo.bar;public class AppMain {public static void main(String[] args) {System.out.println(new AppMain().greet());}public String greet() {return 'Hello world.';}
}

文件:/gradle001/src/test/java/foo/bar/AppMainTest.java

package foo.bar;import static org.junit.Assert.*;import org.junit.Test;public class AppMainTest {@Testpublic void test() {assertEquals(new AppMain().greet(), 'Hello world.'); }}

更新的文件:/gradle001/build.gradle

apply plugin: 'java'def localMavenRepo = 'file://D:/mavenrepo'
repositories {mavenCentral()maven { url= localMavenRepo }
}sourceCompatibility = 1.7
version = '1.0-SNAPSHOT'
group = 'foo.bar.gradle'dependencies { testCompile 'junit:junit:4.11' }task(runSimple, dependsOn: 'build', type: JavaExec) {main = 'foo.bar.AppMain'classpath = sourceSets.main.runtimeClasspath
}

就这样。 现在,如果我们运行build.gradle的“ runSimple”任务,Gradle将为我们做很多事情。 它将进行标准的清理,编译,测试并生成测试报告(假设您到目前为止也已在编写代码,请在您的计算机中检出/gradle001/build/reports/tests/index.html。惊喜),建立并最终运行主类。 大约需要18行build.gradle。 我必须说,我认为这根本不是一件坏事。

有什么大不了的?

你是对的。 但是您错过了重点。 即使是25,000行代码,这18行构建脚本也可以正常工作。 如果您仍然不确定,我建议您阅读这篇文章,其中264行构建脚本似乎表现出色。

嗯……很好,但是Maven的“力量”也没有那么长吗?

你可能是对的。 尽管人们似乎针对这种可能性提供了各种各样的论据和数据,但我认为这不是要讨论的重点。

事实是Maven中的pom.xml只是一个配置文件。 在常规的一天,常规的构建和发布人员不会在Maven中编写任何代码。 当然,Maven允许您创建各种插件,它们可以解决“大多数”问题。 但是,似乎(最“最后”)才是争论的焦点。 在场景/需求不在“大多数”场景之外的地方,使用Maven是一件非常困难的事情。 随着技术生态系统变得越来越多样化,人们开始反抗这种束缚。

我个人认为这就是故事的发展方向。 批处理文件(xyz.bat)具有强大的功能,但是难以管理(很难读取)。 您必须为不同的操作系统编写不同的内容。 没有任务层次结构。 除了最琐碎的项目,我不知道有人喜欢维护它们。

因此来到了蚂蚁。 它还功能强大,并且在任务管理方面做得很好。 您拥有几乎所有目标的目标,而没有目标的目标则可以在批处理文件中编写代码,然后从Ant调用它。 达不到标准的地方。 人们在他们的项目中以各种可能的方式使用它,并且在大多数项目中,构建脚本本身就是一个项目。 他们很难管理,团队中只有几个人确切地知道他们的工作方式,没有人愿意修改它们。

这就是Maven获得重大成就的地方。 它以一致的方式满足了诸如魅力之类的“大多数”要求。 有一种固定的方法可以完成大多数事情。 因此,构建脚本不再是一个黑洞。 而且普通的Joe用Maven脚本射击自己的可能性较小。

有了Gradle,我们正以更大的力量调情。 期望普通的开发人员使用Gradle进行编码,而不仅仅是配置插件(如在Maven中一样)。 因此,普通开发人员会在自己觉得合适的情况下轻松完成工作。

恰恰是当项目冒着创建可能严重破坏构建脚本的风险,周围没有知识库的时候,开发人员会喜欢其中的编码,但讨厌维护它,管理人员会对构建脚本产生噩梦在演示前一天失败,将不得不忍受它。

那你到底在说什么

从我对Maven的了解(无论人们是否喜欢Gradle,人们似乎都同意我的观点),它对于标准/平均/大多数要求都做得很好。 它做得很好。 并且存在不允许您突破的界限,在此界限既可以视为a锁,也可以视为安全功能。 如果您要使用标准技术堆栈创建另一个J2EE Web应用程序/ Java桌面应用程序,我会说没有理由放弃Maven。 如果您还没有接受它,请这样做,您的生活会轻松得多。

但是,如果您在产品开发项目中,并且正在超越人们认为java / j2ee具备的能力的界限(并且假设您不只雇用普通的Joes),我想您可能想在Gradle尝试一下。 它确实有能力。 一起工作很有趣。 我认为Gradle的前进道路确实是光明的,充满了可能性。 花时间在上面是一件好事。

今天就这些。

如果您希望到目前为止阅读过,希望您喜欢它,或者至少发现它很吸引人。 我的文章仅基于我对Gradle的修改,而不是通过任何想象力得出的关于该主题的硬道理。 如果您发现任何错误或本文正确的内容,请在下面发表评论。 我将非常有义务。

参考: Gradle –我们的JCG合作伙伴 Partho在Tech for Enterprise博客上的Maven观点 。

翻译自: https://www.javacodegeeks.com/2013/01/gradle-a-maven-perspective.html

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

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

相关文章

postgis安装_从零开始,构建电子地图网站:0_2_数据处理postgis

软件安装完,开始数据处理。从China Historical GIS下载一份数据。一、数据下载数据来源:China Historical GIS:https://sites.fas.harvard.edu/~chgis/data/chgis/v6/先下载一份时间序列数据:Download CHGIS V6 TIME SERIES Datah…

sar图像去噪matlab,一种基于总曲率的SAR图像变分去噪方法与流程

本发明属于数字图像处理技术领域,具体涉及一种基于总曲率的SAR图像变分去噪方法。背景技术::相干斑噪声是合成孔径雷达(Synthetic Aperture Radar,简称SAR)图像的重要特征,严重影响SAR图像的可解译性。相干斑噪声通常作…

Linux下用netstat查看网络状态、端口状态

在linux一般使用netstat 来查看系统端口使用情况步。 netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的 netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目…

课时2.浏览器和服务器(了解)

1.什么是浏览器? 浏览器就是由安装在我们电脑上的一款软件,QQ,百度影音等一样,都是安装在电脑上的一款软件 那这些软件之间由什么区别呢? 它们的区别就是它们的功能不太一样,QQ是用来聊天的,…

微信自动回复

http://itchat.readthedocs.io/zh/latest/tutorial/tutorial0/。 这个是学习网址,到时候自己学一下。做个案例试试转载于:https://www.cnblogs.com/lilinzhiyu/p/7985864.html

python 定义变量_用python解决动态的定义变量名(并给其赋值方法:大数据处理)...

前言:今天为大家带来的内容是:用python解决动态的定义变量名(并给其赋值方法:大数据处理)具有很好的参考价值,希望对大家有所帮助。喜欢本文内容的记得点赞转发收藏不迷路哦!!!最近消费kafka数据…

appcan php图片上传,appcan文件上传php,asp通用

首先说appcan内部实现了file标签,我们就不用纠结这个问题了,还提供了上传百分比哦,然后下面的方法按从上到下依次看,很简单。上传php,asp页面很简单 ,接收‘file_data’这个文件信息就可以了,如…

javascript 动态修改css样式

方法一:改变外联css文件,这里不讲这个。 方法二:通过改变claaName来改变样式,语法: obj.className "style2";//或者obj.setAttribute("class", "style2"); 方法三:使用obj…

POJ 3225 Help with Intervals(线段树)

POJ 3225 Help with Intervals 题目链接 集合数字有的为1,没有为0,那么几种操作相应就是置为0或置为1或者翻转,这个随便推推就能够了,然后开闭区间的处理方式就是把区间扩大成两倍,偶数存点,奇数存线段就可…

在Spring中嵌入HSQLDB服务器实例

我一直在愉快地使用XAMPP进行开发,直到不得不将其托管在可通过Internet访问的某个地方,供客户端进行测试和使用。 我有一个仅具有384 RAM的VPS,并且需要快速找到一种方法,因此决定将XAMPP安装到VPS中。 由于内存不足,因…

python与材料计算公式_《从问题到程序:用Python学编程和计算》——2.11 补充材料-阿里云开发者社区...

本节书摘来自华章计算机《从问题到程序:用Python学编程和计算》一书中的第2章,第2.11节,作者 裘宗燕,更多章节内容可以访问云栖社区“华章计算机”公众号查看。2.11 补充材料本书各章的主要内容将围绕着怎样通过编程解决计算问题…

centos 6.9 NTP基准时间服务器配置

时间服务器端 yum install ntp -y vim /etc/ntp.conf 增加允许客户端访问 restrict 192.168.0.0 mask 255.255.0.0 nomodify 配置成自启动 chkconfig ntpd on service ntpd start 客户端配置 每天对时一次 crontab -e * 2 * * * ntpdate 192.168.139.130 转载于:https://www.cn…

hsdfz -- 6.16 -- day1

恩这回不写游记了 按照老师要求记录今天的心里路程:这题似乎可做期望得分150->日部分分似乎不是很显然->a题似乎是结论题,大力猜一波结论->过不了样例,先看b题->b题动态树,似乎可以肝lct->不会维护重链&#xff0c…

课时39.细线表格(理解)

请你设计出以下图片里的这个样式的表格 步骤: 我先来制作一个两行两列的表格 2.将table里的cellspacing设置成0 外边距是不见了,但是和我们想要完成的图片有一定的差距,我们发现这样做出来的图片好像是两条线合并到了一起一样,实…

强制Tomcat通过SLF4J / Logback登录

因此,您将JAR可执行Web应用程序与Tomcat捆绑在一起 (请务必先阅读其中一个)。 但是,开头有这些烦人的Tomcat日志,与我们的应用程序日志无关,并且不可自定义: Nov 24, 2012 11:44:02 PM org.apa…

matlab拼碎纸片过程,碎纸片拼接复原模型

1. 引言破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。企事业、机关、院校和军队基于保密的需要,使用碎纸机对重要文件,单据以及材料进行销毁。一些重要的文件随着时间流逝,残破不全,因此&…

python实现贝叶斯分类器_python实现简单的朴素贝叶斯分类器

本文使用的测试问题是“皮马印第安人糖尿病问题”这个问题包括768个对于皮马印第安患者的医疗观测细节,记录所描述的瞬时测量取自患者的年龄,怀孕和血液检查的次数。所有患者都是21岁以上的女性,所有属性都是数值型,而且属性的单位…

VC++编译MPIR 2.7.0

目录 第1章编译 2 1.1 简介 2 1.2 下载 3 1.3 解决方案 4 1.4 创建项目 5 1.5 复制文件树 6 1.6 不使用预编译头文件 8 1.7 包含目录 9 1.8 定义宏 10 1.9 编译前事件 11 1.10 修改 obj 的位置 13 1.11 编译yasm 14 1.12 编译汇编代码 …

PHP大数据处理【转】

1:硬件方面 普通的一个p4的服务器每天最多能支持大约10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力 软件怎么优化都是于事无补的。主要影响服务器的速度 有:网络-硬盘读写速度-内存大小-cpu处理速度…

http1.X与2.0

HTTP HTTP 1.X HTTP是建立在TCP协议上的,HTTP协议的瓶颈及优化都是基于TCP协议本身的特性。TCP建立连接时有三次握手 会有1.5RTT的延迟,为了避免每次请求都经历握手待来的延迟,应用层会选择不同策略的http长连接。 HTTP 1.0 连接不能复用以…