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

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在此框架中起着很大的作用,使您可以使用简单的语法编写测试。 这意味着测试可以由公司中的任何人进行,而不仅仅是开发人员。 您可以通过Spock的Web控制台对其进行测试。

也检查这些

尽管我们只选择关注这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

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

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

相关文章

批量获取服务器cpu信息,获取服务器的cpu利用率

你得到的错误是什么?这就是我正在使用同样的东西(剥离了一下)。它显示每物理处理器的负载。strComputer "."Dim arrProcessors : ReDim arrProcessors(2,0)Set objWMIService GetObject("winmgmts:" _& "{impersonationLevelimperso…

CEPH FILESYSTEM

参考文档: CEPH FILESYSTEM:http://docs.ceph.com/docs/master/cephfs/ CephFS best practices:http://docs.ceph.com/docs/master/cephfs/best-practices/ MDS STAT:http://docs.ceph.com/docs/master/cephfs/mds-states/ Mount …

条款11 在operator=中处理“自我赋值”

“自我赋值”发生在对象被赋值给自己时: 1 classWidget {...}; 2 Widget w; 3 ... 4 w w; //赋值给自己这看起来有点愚蠢,但它合法,所以不要认定客户绝不会那么做。此外赋值动作并不总是那么可被一眼辨认出来,例如: a[…

定时器实现方式之TimerTask、Timer

在未来某个指定的时间点或者经过一段时间延迟后执行某个事件,这时候就需要用到定时器了。定时器的实现方式有很多种,今天总结最简单的实现方式。java 1.3引入了定时器框架,用于在定时器上下文中控制线程的执行,其由类Timer和Timer…

jaxb 处理_休息使用Jersey –包含JAXB,异常处理和客户端程序的完整教程

jaxb 处理最近,我开始使用Jersey API开发一个Restful Web服务项目。 在线提供了一些教程,但是我遇到了异常处理方面的一些问题,而且在使用JaxB并提供异常处理方法的完整项目中找不到任何地方。 因此,一旦我能够使用带有异常处理和…

并查集(UnionFindSet)

小米的校招题:朋友圈(25分)假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这…

Spring Boot配置文件放在jar外部

https://www.cnblogs.com/xiaoqi/p/6955288.html 在当前目录创建文件夹config,把配置文件放到config目录,然后启动 java -jar export.jar --spring.config.locationconfig/config.properties转载于:https://www.cnblogs.com/Andrew520/p/10491927.html

Apache Camel Intellij IDEA插件的工作已开始

仅仅因为圣诞节并不意味着骆驼停滞不前。 在23日晚上,我花了一些时间进行研究,并开始研究IDEA的Apache Camel插件的小原型。 它已经存在了很长时间。 原因是Apache Camel为目录提供了有关工具的大量有用信息。 该目录包含有关每个Camel组件&#xff0c…

Python函数参数传递:传值还是传引用

引子 首先来看一个列子: def change(val):val.append(100)val [T, Z, Y] nums [0, 1] change(nums) print(nums)123456123456 猜猜结果应该是什么? 如果Python函数参数的传递是传值的话,结果应该是[0, 1],如果是传引用的话&am…

activitemq与spring的整合

activitemq整合spring 一.activmq的点对点模型 pom.xml: <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoca…

Python遍历字典的四种方法对比

#!/usr/bin/python from time import clockl [(x,x) for x in xrange (10000000)] d dict(l) t0 clock() # 方法一 for i in d: n d[i]t1 clock() # 方法二&#xff1a;最慢 for k,v in d.items(): n vt2 clock() # 方法三: 最快&#xff0c;推荐方法 for k,v in d.ite…

jboss启动初始页面_JBoss BRMS最佳实践– BPM流程初始化层的提示

jboss启动初始页面我过去发布过一些有关迁移策略的文章&#xff0c;仔细研究了流程层&#xff0c;并提供了一些有关jBPM的最佳实践 &#xff0c;它们都涉及到BPM策略的非常具体的部分。 我想重新讨论最佳实践的主题&#xff0c;然后在智能集成企业级别上&#xff0c;我们讨论使…

Python 学习笔记 多进程 multiprocessing

Python 解释器有一个全局解释器锁(PIL)&#xff0c;导致每个 Python 进程中最多同时运行一个线程&#xff0c;因此 Python 多线程程序并不能改善程序性能&#xff0c;不能发挥多核系统的优势&#xff0c;可以通过这篇文章了解。 但是多进程程序不受此影响&#xff0c; Python 2…

Django 学习笔记第一课

Django web 框架介绍&#xff1a; MVC框架的核心思想 核心思想&#xff1a;解耦&#xff1b; 好处&#xff1a;可扩展性&#xff0c;向后兼容&#xff0c;低耦合&#xff0c;高内聚&#xff1b; 普通web结构框架MVC框架 M:model 主要用于数据库层次的封装&#xff1b; V:view…

记住要重置线程上下文类加载器

我很难思考与Java 加载有关的东西&#xff0c;而不是与类加载器有关的东西。 在使用应用程序服务器或OSGi的情况下尤其如此&#xff0c;在这些应用程序服务器或OSGi中&#xff0c;经常使用多个类加载器&#xff0c;并且透明地使用类加载器的能力降低了。 我同意OSGI Alliance B…

EntityFramework Code-First—领域类配置之DataAnnotations

本文出自&#xff1a;https://www.cnblogs.com/tang-tang/p/5510574.html 一、摘要 EF Code-First提供了一个可以用在领域类或其属性上的DataAnnotation特性集合&#xff0c;DataAnnotation特性会覆盖默认的EF约定。 DataAnnotation存在于两个命名空间里&#xff1a; System.Co…

Python 调试工具 PDB(Linux 环境下调试)

转载&#xff1a;http://blog.163.com/gjx0619126/blog/static/12740839320114995947700/ 在python中使用pdb模块可以进行调试 import pdb pdb.set_trace() 也可以使用python -m pdb mysqcript.py这样的方式 (Pdb) 会自动停在第一行&#xff0c;等待调试,这时你可以看看 帮助…

Ubuntu 更新源方法

安装完Ubuntu系统之后&#xff0c;面临的最主要的一个问题就是将apt安装源进行更新&#xff0c;因为在国内直接利用Ubuntu默认的安装源下载安装包速度慢&#xff0c;并且有的时候软件版本也比较旧。今天小编对Ubuntu更新源进行介绍&#xff1a;&#xff08;这里针对阿里源和清华…

PAT Basic 1002

1002 写出这个数 &#xff08;20 分&#xff09;读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;即给出自然数 n 的值。这里保证 n 小于 10​100​​。 输出格式&…

mybatis crud_MyBatis教程– CRUD操作和映射关系–第2部分

mybatis crud为了说明这一点&#xff0c;我们正在考虑以下示例域模型&#xff1a; 会有用户&#xff0c;每个用户可能都有一个博客&#xff0c;每个博客可以包含零个或多个帖子。 这三个表的数据库结构如下&#xff1a; CREATE TABLE user (user_id int(10) unsigned NOT NU…