gradle groovy_适用于Java开发人员的Groovy吗? 认识Gradle,Grails和Spock

gradle groovy

Java开发人员最感兴趣的Groovy用例有哪些?

尽管已经有一段时间了,但似乎只有Groovy最近才开始使用Groove。 对于某些人来说,它基本上只是另一种深奥的JVM语言,但是由于一些流行的工具可以帮助您使用Java,因此它比您想象的要流行。

在下面的文章中,我们将检查Groovy和Java之间的连接是什么,并尽力抓住Groovy双关语。 我们提前致歉。

几乎和Java一样

是什么让Groovy变得如此时髦呢? 这是一种面向对象的JVM语言。 这种动态语言是开源的,并得到Apache和Groovy社区的支持。 这意味着您将找到围绕它的选项,功能和工具,包括Web框架,桌面应用程序框架,并发/异步/并行库,测试框架等等。

Groovy使用大括号语法,这使Java开发人员更容易学习和使用。 但是,它包括一系列与Java区别的功能,例如:

  • 静态和动态类型化(在运行时解释变量的类型时)
  • 运算符重载
  • 关联数组
  • 嵌入字符串中的表达式
  • 安全导航操作员“?”。 自动检查是否存在null –这很有意义,因为NullPointerException是生产中最常见的异常类型
  • 没有分号(!)

在Groovy官方网站上,指出该语言旨在通过简洁,熟悉和易于学习的语法来提高开发人员的生产率。 换句话说,如果您了解Java,就可以立即学习和使用Groovy。

您可以将Groovy与任何Java程序集成在一起,以获得脚本功能,特定领域的语言编写,运行时和编译时元编程以及函数式编程。 其他功能包括闭包,构建器,类型推断和静态编译。

Groovy还具有“脚本和测试胶”。 这意味着Groovy是编写“紧凑”和可维护的测试以及构建和自动化任务的理想选择。 但是这里最大的问题是特定领域语言创作(DSL),它使您可以创建关键字和语法来表达问题域的更高抽象表示。

更容易将其视为非程序员获取信息的解决方案。 如果公司中有需要提取数据,创建剪切或执行任何其他任务的分析师,则可以为他们创建自定义语言。 这样,他们不必知道如何编程,而只需熟悉所需测试所需的语法。

以下是一些DSL示例,可使其更加清晰:

// equivalent to: turn(left).then(right)
turn left then right// equivalent to: take(2.pills).of(chloroquinine).after(6.hours)
take 2.pills of chloroquinine after 6.hours// equivalent to: select(all).unique().from(names)
select all unique() from namesshow = { println it }
square_root = { Math.sqrt(it) }def please(action) {[the: { what ->[of: { n -> action(what(n)) }]}]
}// equivalent to: please(show).the(square_root).of(100)
please show the square_root of 100
// ==> 10.0

如果您想开始使用Groovy,我们建议您查阅官方文档 。

数字不说谎

万一您仍然对Groovy 持反对态度 ,还可以快速了解一下TIOBE索引,该索引衡量编程语言的流行性。 在其中,您会发现Groovy是2016年7月最受欢迎的20种编程语言之一。

在就业市场上也有兴趣。 在我们的最新职位之一中, 我们处理了351,799个职位空缺 ,发现对Groovy开发人员的需求不断增长。

虚拟机

美国JVM语言工作趋势

Groovy在我们的Java项目中适合什么地方?

当开始一个全新的Java项目时,我们大多数人选择的第一个入门工具是Maven和JUnit。 但是随着项目的发展一段时间后,需求发生了变化,我们发现自己想要比以前更多的自定义。 那时,Maven通常被Gradle取代。 或者至少这就是我们在开发Takipi时经历的旅程。

Gradle是Groovy内置的工具,可帮助我们使用Java。 听起来很棘手,但实际上使用一种语言与另一种语言一起工作确实很有趣。 另外,在使用了一段时间并了解了Groovy之后,我们可以使用一种新的语言,这对我们总是很有趣。 现在唯一剩下的问题是我们还能将其用于什么? 简单的答案就是工具。 但是哪一个呢?

从Gradle开始

gradle-logo-300x65 @ 2x

Gradle是一个开放源码的构建自动化系统,它使用用Groovy编写的特定领域语言而不是Maven的XML配置。 它可以帮助您自动化不同的任务,例如构建,测试,发布,部署等。 您还可以创建其他类型的项目来生成静态网站,文档或其他任何内容。

它是为具有增长潜力的大型多项目构建而设计的,同时仍为增量构建提供支持,您可以在其中添加一些小软件,直到达到最终目标。 Gradle可以确定构建树的哪些部分是最新的,因此依赖于那些部分的任何任务都无需重新执行。

这样,Gradle消除了代码冻结,并允许QA团队在处理另一个零件时检查某个零件。 您甚至可以使用它来协调单个开发人员版本到IDE级别的持续集成(CI)版本。

如果您发现您的队友正用他们的nerf枪弄乱或者只是放松一下 ,Gradle也会在该领域提供帮助。 有了它,您可以快速发货,而不会在办公室中浪费太多的“编译”时间,因此您实际上可以完成一些工作。

如果您是Maven爱好者,或者仍然不确定转移到Gradle可以如何帮助您的项目,则后者在下面的链接中创建了两者之间的完整功能比较。

不只是DSL:Grails Web框架

grails徽标

Grails Web框架希望通过Convention-over-Configuration范式帮助您提高生产率。 怎么样? 通过为您提供独立的开发环境,同时隐藏大部分配置细节,使您可以专注于重要的事情。 或者换句话说; 它旨在使开发尽可能简单。

它支持在单个界面上重用Hibernate和Spring等现有Java技术,提供可自定义和可扩展的Ajax支持,并且基本上提供了完整的开发模式,包括Web服务器和资源的自动重载。

在官方网站上,您可以找到选择Grails的主要网站,包括Netflix Asgard,用于Amazon Web Services,Vodafone 等应用程序部署和云管理的Netflix开源Web界面。

转向Spock

如果Gradle已经是您公司的一部分,那么该该看看Groovy必须提供哪些其他工具了。 Spock最近已成为许多Java开发人员选择的模拟和测试框架的领先者。

Spock由Peter Niederwieser和Luke Daley于2008年创建,专门为Java和Groovy应用程序而开发。 该单元测试工具与大多数IDE,构建工具和持续集成服务器兼容,能够处理软件应用程序的整个生命周期。 它扩展了JUnit运行器,该运行器用于运行测试类,因此它可以与您在JUnit框架中使用的当前工具配合使用。 如果您要从一个框架迁移到另一个框架,那将是一个非常平稳的过程。

DSL在此框架中起着很大的作用,使您可以使用简单的语法编写测试。 这意味着测试可以由公司中的任何人完成,而不仅仅是开发人员。 您可以通过其Web控制台测试Spock。

也检查这些

尽管我们只选择关注这3个与Groovy相关的项目,但还有许多其他选项值得一看。 感谢社区,您可以找到与Groovy相关的项目的一长串,例如:

  • GPars –直观,安全的方式同时处理Java或Groovy任务
  • Ratpack –用于创建高性能Web应用程序的工具包
  • Griffon –在JVM中开发桌面应用程序的应用程序框架
  • Sdkman –用于在大多数基于Unix的系统上管理多个软件开发套件的并行版本的工具

这些只是冰山一角,还有更多的Groovy项目。 最好的开始方法是检查Github上热门的Groovy项目 。

最后的想法

当涉及可用的框架,工具和实用程序时,Java开发人员有很多选择,而不是全部用Java编写。 实际上,由于Java开发人员编写了令人印象深刻的工具,因此他们在一个或另一个项目中有很好的机会接触Groovy。

由于该语言与Java非常相似,因此,它的优点是立即可以轻松学习和使用。 牢记所有这些,根据您当前项目的需求,最终选择使用Gradle,Spock,Grails还是任何其他Groovy或非Groovy框架。

如果您遇到任何其他Groovy(或简单的groovy)框架,我们很乐意在下面的评论中听到它们。

翻译自: https://www.javacodegeeks.com/2016/08/groovy-java-developers-meet-gradle-grails-spock.html

gradle groovy

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

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

相关文章

JSP 指令元素

文章目录page 指令import 属性pageEncoding 属性contentType 属性session 属性isELIgnored 属性errorPage 属性isErrorPage 属性include 指令file 属性taglib 指令uri 属性prefix 属性jsp 源文件转换成对应的 .java 文件时,jsp 的指令会影响 Java 源代码的生成&…

Python日常工具 ----- 读取Excel表格下载MP3

import xlrd import os import requestsdef GetList():worksheet xlrd.open_workbook(01.xlsx)sheet_names worksheet.sheet_names()print(sheet_names)for sheet_name in sheet_names:sheet worksheet.sheet_by_name(sheet_name)rows sheet.nrows # 获取行数cols sheet.…

indesign中调出字符样式快捷键_Word中十大黄金快捷键,你会用几个?

在使用Word文档时,熟练使用快捷键能够有效的提升我们的工作效率,但是,Word中快捷键也比较多,要想全部掌握,那不太现实,这里,易老师给大家挑选了10组黄金快捷键,非常实用。01 快速移动…

couchbase集群_使用CLI扩展和重新平衡Couchbase集群

couchbase集群Couchbase通过多种方式提供高可用性和灾难恢复 : 同质簇 复写 集群内复制 备份还原 机架区意识 该博客将展示如何使用Couchbase命令行界面(CLI)创建Couchbase集群。 此外,还可以使用Couchbase REST API和Couchba…

【音视频安卓开发 (十)】jni开发中将java中的buffer映射到native c++中

首先在java层定义一个buffer,并且开辟相应的内存空间 private ByteBuffer byteBuffer; byteBuffer ByteBuffer.allocateDirect(bytesPerFrame * framesPerBuffer ); 然后调用本地的方法来设置内存地址到native层,该方法在jni初始化时就已经被动态的注册了方法,注…

maya室内模型_C4d和3dmax、maya相比有什么优势?

C4D和3dmax、maya都是三维软件,功能都是非常的nice,很多新手小伙伴就在好奇它们有什么区别,对比之下,c4d有哪些优势?c4d和3dmax的主要应用领域就是区分它们的地方。C4D一般用于栏目包装,影视后期&#xff0…

HH SaaS电商系统的标签系统设计

文章目录打标规则公式打标公式变量修改标签删除标签标签实体标签与对象的关系标签和商品:标签和商城会员:标签和租户会员:打标规则公式 公式名称:近日销量创历史新高 规则公式:近$ {days}销量创历史新高 公式名称&a…

jvm高并发_在JVM上对高并发HTTP服务器进行基准测试

jvm高并发在第一篇关于HTTP客户端的文章 (我将您重定向到JVM上的高效HTTP的介绍)之后,现在让我们来谈谈HTTP 服务器 。 有一些关于HTTP服务器的基准测试,但通常受到诸如以下缺点的阻碍: 没有有效地执行高并发方案&am…

【WebRTC---源码篇】(十)WEBRTC/RTCP SR持续更新中)

关于WebRTC/SR(发送者报告)的内容可以通过阅读以下链接来查看,本文重点研究WebRTC源码中RTCP报文构造和发送,以及相关的数据从何而来。在发送端,RTCP以周期性发送为基准,辅以RTP报文发送时的及时发送和REMB报文的立即发送。发送过程主要包括Feedback信息获取、RTCP报文构…

excel未完全加载怎么办_你知道如何改变Excel的打开姿势吗?

你是否曾经想过在启动Excel时自动打开某些特定的文档?当然,你永远都可以手动去打开任何一个文档,但是如果有那么一种可能,去每次省下那么几秒来自动完成这一操作,你会愿意尝试吗?今天,火箭君就和…

电商系统的售后模块设计

文章目录售后单实体方案一方案二服务类型可选售后服务判断规则退款类型售后截止时间金币和优惠券如何返还买家端订单列表的“售后按钮”逻辑说明服务端处理逻辑买家端操作“售后按钮”页面跳转逻辑商家管理后台订单列表的“售后处理”逻辑说明服务端处理逻辑商家端操作“售后处…

Gradle技巧–显示buildscript依赖性

在Gradle中如何显示和分析buildscript依赖项(例如插件)的简单方法 介绍 这是我的Gradle技巧迷你系列的第三部分,该系列与可视化和依赖性分析有关。 在第一篇文章中,我介绍了如何显示多项目构建中所有子项目的依赖关系的方法。 在…

任意采样率转16K采样率

import osdef OtherTo16bit(Path, data):InPath Path \\ dataOutPath os.getcwd() \\16home\\ data.split(".")[0] ".wav"os.system(ffmpeg -i InPath -acodec pcm_s16le OutPath)# path定义要获取的文件名称的目录(C盘除外&#…

python中元组和列表转化_4.Python列表/元组/集合/字典

4.1 Python列表• 列表用 [ ] 标识,是Python 最通用的复合数据类型。• 列表用 [ ] 表示,列表具有可嵌套性4.1.1 Python列表截取• 列表可以使用 [头下标:尾下标] 截取相应的子列表, 从左到右索引默认 0 开始,从右到左索引默认-1开…

JavaBean中的属性

让我们一步一步了解: 成员变量 public class Test { //成员变量 private String n; }属性 属性是 getXxx()方法去掉 get 后,将首字母小写的那个单词,此处属性名与成员变量名相同,都是“n” 注:属性名和成员变量名通…

重置线程中断状态_记住要重置线程上下文类加载器

重置线程中断状态我很难思考与Java 加载有关的东西,而不是与类加载器有关的东西。 在使用应用程序服务器或OSGi的情况下尤其如此,在这些应用程序服务器或OSGi中,经常使用多个类加载器,并且透明地使用类加载器的能力降低。 我同意O…

【WebRTC---源码篇】(十一)WebRTC编码与发送H264持续更新中

H264在WebRTC中是如何编解码的? h264编解码代码位于文件src\modules\video_coding\codecs\h264下 #ifndef MODULES_VIDEO_CODING_CODECS_H264_INCLUDE_H264_H_ #define MODULES_VIDEO_CODING_CODECS_H264_INCLUDE_H264_H_#include <memory> #include <vector>#i…

python大一题库西农_生态学(西北农林科技大学)知到智慧树2020章节测试答案...

生态学(西北农林科技大学)知到智慧树2020章节测试答案更多相关问题【单选题】在测定食品中灰分含量时,灼烧残留物不可能存在的是( )A. 蔗糖 B. 钠 C. 钾 D. 氯【单选题】对于老年骨质疏松说法错误的是( )A. 老年骨质疏松症属于继发性骨质疏松症 B. 是使骨质脆性增加导致骨折危险…

EL表达式学习笔记

文章目录EL 表达式是干什么用的EL 表达式的底层原理EL 表达式可以用在哪些地方EL 表达式用来访问 JavaBean 的属性EL 表达式获取请求参数的值EL 表达式用于运算&#xff0c;将结果作为标签的属性值或者直接输出Struts2 的 EL 表达式EL 表达式翻译为 Java 代码的含义EL 表达式示…

【WebRTC---源码篇】(十二)WebRTC/RTX协议

在SDP中可以查询到提前协商好的RTX信息 接受到RTCP NACK 重传RTX包,有效荷载前两个字节为原始seqnumber 如何知道重传的是哪个包 发送RTX