gradle maven_Gradle – Maven的观点

gradle maven

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

什么是Gradle?

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

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

Maven对我来说效果很好。

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

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

至于Gradle,它已经成功吸引了一些令人印象深刻的顾客。 Spring人们已经将Spring核心转移到Gradle。 Hibernate的人详细记录了他们继续学习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 –来自Tech for Enterprise博客的JCG合作伙伴 Partho的Maven观点 。

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

gradle maven

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

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

相关文章

JDK 9中已弃用Java的Observer和Observable

在博客文章《 应用JDK 9 Deprecated增强功能》中 ,我讨论了JDK 9中 Deprecated批注中对forRemoval()和since()可选元素(方法)的添加 。 我在那篇文章中说:“在Java SE API上应用新的…

理解依赖注入(IOC)和学习Unity

IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection)。 作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调…

java中怎样验证重复文件_java – 如何在下载之前检查URL中的重复文件

如果您有基本URL并存储具有相同文件名的文件.由于文件修改时间和If-Modified-Since HTTP Header,您可以询问服务器是否值得再次下载映像.File f new File();// the file to downloadHttpURLConnection con (HttpURLConnection) new URL("http://www.test.com/"f.ge…

Jason是炮王

Jason是炮王 转载于:https://www.cnblogs.com/TankJam/p/11203636.html

事件传递 java_将事件传递/发送到父组件?

在Angular中,我可以创建一个发出动作的子组件:Component({...template: Click Me})export class ChildComponent {Output() onChildAction new EventEmitter();childAction() {this.onChildAction.emit();}}以及处理它的父组件 . 就像是:Com…

mongodb身份验证_MongoDB身份验证

mongodb身份验证我最近更新了Mongometer ,使其更加灵活。 发布新版本后不久,其中一位用户通过在帖子中发表评论来反馈问题。 我启动了我的机器,打开了我的IDE,发现了问题,并在半小时内将修补程序推送到了github 。 这不…

mysql列类型

http://hi.baidu.com/b37798969/item/429fb25f838f1d3233e0a99b MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供…

Java13的API_JAVA基础--JAVA API常见对象(其他API)13

一、其他API1.System类system类中的方法和成员变量都是静态的, 不需要创建System对象就可以直接使用。1 /*2 * 演示System的使用3 */4 public classSystemDemo {5 public static voidmain(String[] args) {67 /*8 * System类中的静态成员变量: out 和 er…

适用于Java开发人员的Elasticsearch:简介

本文是我们学院课程的一部分,该课程的标题为Java开发人员的Elasticsearch教程 。 在本课程中,我们提供了一系列教程,以便您可以开发自己的基于Elasticsearch的应用程序。 我们涵盖了从安装和操作到Java API集成和报告的广泛主题。 通过我们简…

人民邮电出版社图灵公司的两本SQL Server 2005图书诚征译者

人民邮电出版社图灵公司介绍(来自http://www.turingbook.com/) 北京图灵文化发展有限公司成立于2005年6月,由人民邮电出版社投资控股,以策划出版高质量的科技书籍为核心业务,主要出版领域包括计算机、电子电气、数学统…

java容器类继承_JAVA容器 - weslie - OSCHINA - 中文开源技术交流社区

一、 数组1、数组是保存一组对象的最有效的方式。但数组有固定的尺寸而受限(p216)2、数组与其他种类的容器之间的区别有三方面:效率、类型和保存基本类型的能力。在Java中,数组是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性…

前端通信

Node中的net模块提供的前端通信 H5提供的 webSocket 【 常用于 移动端 】pc端低版本浏览器使用 socket.io 通信- 服务端: 总的服务器 举例: 腾讯的qq服务器 1个整体- 客户端: 单个用户使用应用 举例: 每个人的qq 多个client.js 客…

java定位线程阻塞_Arthas - 定位 Java 性能问题原来这么简单

目录:一、Arthas 介绍二、Arthas 使用场景三、Arthas怎么使用四、Arthas 定位性能问题定位Java代码导致占用CPU高的问题线程死锁前言:在做性能测试的过程中,当遇到Java性能问题,比如CPU飙升,负载突高,内存溢…

SVN 本地文件锁/服务端文件锁清除步骤

1.本地文件锁,直接cleanup,cleanup界面选择break locks即可 2.服务端文件锁,本地文件右击没有release lock或者break lock的选项时 方法1:右键,svn选择browser repo,找到该文件,右击&#xff0c…

java 对象复活_Java对象复活

java 对象复活总览 收集覆盖了finalize()的对象之后,将其添加到终结处理队列中,以在调用每个对象的finalize()方法之后进行清理。 如果您复活了物体,会发生什么? 何时定案&#xff…

a b和c 15 java_1011. A+B和C (15)

给定区间[-231, 231]内的3个整数A、B和C&#xff0c;请判断AB是否大于C。输入格式&#xff1a;输入第1行给出正整数T(<10)&#xff0c;是测试用例的个数。随后给出T组测试用例&#xff0c;每组占一行&#xff0c;顺序给出A、B和C。整数间以空格分隔。输出格式&#xff1a;对…

深入浅出《设计模式》之工厂模式(C++)

前言 模式介绍 在之前简单工厂模式中&#xff0c;我们介绍了简单工厂模式的缺陷是违背了开放-封闭原则。如果在面馆中添加了烤海参&#xff0c;那将会修改waiter工厂类。违背了类内封闭原则。 还以面馆为例&#xff0c;现在两种面&#xff0c;用一个服务员来卖就可以&#xff0…

当心Spring缓慢的事务回调

TL; DR 如果您的应用程序无法获得新的数据库连接&#xff0c;则重新启动ActiveMQ代理可能会有所帮助。 有兴趣吗 性能问题 几个月前&#xff0c;我们经历了生产中断。 大家都很熟悉&#xff0c;许多请求都失败了&#xff1a; java.sql.SQLTransientConnectionException: Hika…

jmeter学习笔记(八-1)

Jmeter中有较多需要参数化测试的地方&#xff1a; 1.从一个用户登录的接口获取登录后的token值&#xff0c;取值后用于后续接口调用 2.获取用户浏览后的cookies信息&#xff0c;需要用到HTTP Cookie 管理器来为同一线程组提供通用的cookies信息 Jmeter中通过${}形式来取参数值 …

python 对象转dict_如何将python dict对象转换为java等效对象?

总是有jython。这里有一点来自this article&#xff0c;它提供了python/java的良好并排视图The Jython analogues to Javascollection classes are much moretightly integrated into the corelanguage, allowing for more concisedescriptions and useful functionality.For e…