Groovy 安装与开发
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。作为跑在JVM中的另一种语言,Groovy语法与 Java 语言的语法很相似。同时,Groovy 抛弃了Java烦琐的文法。同样的语句,使用Groovy能在最大限度上减少你的击键次数——这确实是“懒惰程序员们”的福音。
Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行 Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 Groovy 与 Java 代码的互操作很容易。(注意:不是指Groovy替代java,而是指Groovy和java很好的结合编程。
Groovy 官网:http://www.groovy-lang.org
Groovy 特点
1、 构建在强大的Java语言之上并添加了从Python、Ruby、Smalltalk等语言中学到的 诸多特征,例如动态类型转换、闭包和元编程(meta programming)支持。。
2、为Java开发者提供了 现代最流行的编程语言特性,而且学习成本很低(几乎为零)。
3、 支持DSL(Domain Specific Languages领域定义语言)和其它简洁的语法,让代码变得易于阅读和维护。
4、受检查类型异常(Checked Exception)也可以不用捕获。
5、 Groovy拥有处理原生类型,面向对象以及一个Ant DSL,使得创建Shell Scripts变得非常简单。
6、在开发Web,GUI,数据库或控制台程序时通过减少框架性代码大大提高了开发者的效率。
7、支持单元测试和模拟(对象),可以简化测试。
8、无缝集成所有已经存在的 Java对象和类库。
9、直接编译成Java字节码,这样可以在任何使用Java的地方使用Groovy。
10、支持函数式编程,不需要main函数。
11、一些新的运算符。
12、默认导入常用的包。
13、断言不支持jvm的-ea参数进行开关。
14、支持对对象进行布尔求值。
15、类不支持default作用域,且默认作用域为public。
16、groovy中基本类型也是对象,可以直接调用对象的方法。
Groovy 语法
Groovy 语法与Java 语言的语法很相似,虽然 Groovy 的语法源于Smalltalk和Ruby这类语言的理念,但是可以将它想像成 Java 语言的一种更加简单、表达能力更强的变体。在这点上Ruby与 Groovy 不同,因为它的语法与 Java 语法差异很大。
许多 Java 开发人员喜欢 Groovy 代码和 Java 代码的相似性。从学习的角度看,如果知道如何编写 Java 代码,那就已经了解 Groovy 了。Groovy 和 Java 语言的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少。
- Groovy 的松散的 Java 语法,允许省略行末分号和修改符。
-
除非另行指定,Groovy 的所有内容都为
public
。 -
Groovy 允许定义简单脚本,同时无需定义正规的
class
对象。 - Groovy 在普通的常用 Java 对象上增加了一些独特的方法和快捷方式,使得它们更容易使用。
- Groovy 语法还允许省略变量类型。
-
关于闭包:可以将闭包 想像为一个代码块,可以现在定义,以后再执行。可以使用这些强大的构造做许多漂亮的事,不过最著名的是简化迭代。使用 Groovy 之后,就有可能再也不需要编写
Iterator
实例了。 -
动态的 Groovy: 从技术上讲,Groovy 可能是您最近听说过的类型最松散的动态语言之一。从这个角度讲,Groovy 与 Java 语言的区别很大,Java 语言是一种固定类型语言。在 Groovy 中,类型是可选的,所以您不必输入
String myStr = "Hello";
来声明String
变量。可以直接使用def进行不指定类型定义,类似于js中的var。 - 与Java互用:用 Groovy 编写的任何内容都可以编译成标准的 Java 类文件并在 Java 代码中重用。类似地,用标准 Java 代码编写的内容也可以在 Groovy 中重用。
Groovy 安装
1. 命令安装
a)Mac OS X (推荐)
brew install groovy
sudo port install groovy
b)Windows (推荐)
apache-groovy-binary-2.4.12.zip
安装配置:
apache-groovy-binary-2.4.12.zip
unzip apache-groovy-binary-2.4.12.zip
sudo cp -r groovy-2.4.12 /opt/groovy-2.4.12
vim /etc/profile
Groovy_HOME=/opt/groovy-2.4.12
export PATH=$Groovy_HOME/bin:$PATH
source /etc/proflile
验证安装:
$ groovy -v
Groovy Version: 2.4.12 JVM: 1.8.0_121 Vendor: Oracle Corporation OS: Mac OS X
c)其它平台
2. Eclipse 插件安装
Help —> Install New Software... —> Add...
Name : groovy
Locaiton : http://dist.springsource.org/snapshot/GRECLIPSE/e4.6/
安装参考 Github: groovy-eclipse
Groovy 新建项目
1. 新建Groovy项目:HelloGroovy
File —> New... Other... —> Groovy —> Groovy Project
2. 新建Groovy Class 类: HelloMimvp
3. 查看Groovy 项目结构
4. 打印 hello mimvp.com
vim HelloMimvp.groovy
package com.mimvp class HelloMimvp { static main(args) { println("hello mimvp.com") } }
运行方式有四种:
1)Groovy 脚本运行: Run As —> Groovy Script (推荐)
运行结果:hello mimvp.com
2)Groovy 编译运行: Run As —> Groovy Console
将会启动一个小窗口 GroovyStarter
方式3) Java 编译运行: Run As —> Java Application
运行结果:hello mimvp.com
方式4) 控制台,命令编译运行:groovy HelloMimvp.groovy
运行结果:
$ groovy HelloMimvp.groovy
hello mimvp.com
Groovy 命令行运行
上面介绍了在Eclipse IDE里运行,Groovy同Java一样,也支持命令行运行
$ groovy -e "println('hello mimvp.com')"
hello mimvp.com
控制台下,启动脚本:groovysh
$ groovysh Groovy Shell (2.4.12, JVM: 1.8.0_121) Type ':help' or ':h' for help. -------------------------------------- groovy:000> println "hello mimvp.com" hello mimvp.com ===> null groovy:000> println("hello mimvp.com") hello mimvp.com ===> null groovy:000> for(i=0;i<5;i++){ groovy:001> println("i : " + i); groovy:002> } i : 0 i : 1 i : 2 i : 3 i : 4 ===> null
groovysh 显示帮助
$ groovysh Groovy Shell (2.4.12, JVM: 1.8.0_121) Type ':help' or ':h' for help. ------------------------------------------------- groovy:000> :help For information about Groovy, visit: http://groovy-lang.org Available commands: :help (:h ) Display this help message ? (:? ) Alias to: :help :exit (:x ) Exit the shell :quit (:q ) Alias to: :exit import (:i ) Import a class into the namespace :display (:d ) Display the current buffer :clear (:c ) Clear the buffer and reset the prompt counter :show (:S ) Show variables, classes or imports :inspect (:n ) Inspect a variable or the last result with the GUI object browser :purge (:p ) Purge variables, classes, imports or preferences :edit (:e ) Edit the current buffer :load (:l ) Load a file or URL into the buffer . (:. ) Alias to: :load :save (:s ) Save the current buffer to a file :record (:r ) Record the current session to a file :history (:H ) Display, manage and recall edit-line history :alias (:a ) Create an alias :set (:= ) Set (or list) preferences :register (:rc) Register a new command with the shell :doc (:D ) Open a browser window displaying the doc for the argument For help on a specific command type: :help command
groovysh 退出命令行
:exit 或 :quit
Ctrl + d // 快捷键退出
Groovy 开发示例
1. 变量与函数
package com.mimvp class HelloMimvp { static main(args) { test_param() } static test_param() { def mimvp = 2066 println mimvp // 2066 println mimvp.class // class java.lang.Integer mimvp = 'mimvp.com' println mimvp // mimvp.com println mimvp.class // class java.lang.String mimvp = ["proxy", "domain", "money"] println mimvp // [proxy, domain, money] println mimvp.class // class java.util.ArrayList mimvp = [ "proxy" : "proxy.mimvp.com", "domain" : "domain.mimvp.com", "money" : "money.mimvp.com", "age" : 3, ] println mimvp // [proxy:proxy.mimvp.com, domain:domain.mimvp.com, money:money.mimvp.com, age:3] println mimvp.class // null } }
2. 循环与闭包
static test_class() { // list array def mimvp = ["proxy", "domain", "money"] // 方法1 for(Iterator iter = mimvp.iterator(); iter.hasNext();){ print iter.next() + ", " // proxy, domain, money, } // 方法2 mimvp.each{ println it } // 方法3 mimvp.each{ value -> println value } // map hash mimvp = [ "proxy" : "proxy.mimvp.com", "domain" : "domain.mimvp.com", "money" : "money.mimvp.com", "age" : 3, ] mimvp.each{ key, value -> println "${key} : ${value}" } // proxy : proxy.mimvp.com // domain : domain.mimvp.com // money : money.mimvp.com // age : 3 "mimvp".each{ println it.toUpperCase(); } // M // I // M // V // P }
3. 抓取网页
Groovy 访问网站,有两种方式:
方式1) 通过URL访问,不需要引用 HTTPBuilder
方式2) 通过 HTTPBuilder 访问,需要引入 @Grab
/** * Groovy 支持 http * * mimvp.com * 2015-11-09 */ @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1' ) import groovyx.net.http.* import static groovyx.net.http.ContentType.* import static groovyx.net.http.Method.* import org.apache.http.auth.* class MimvpSpider { static def proxy_http = "http://208.92.93.218:1080" static def mimvp_url = "http://proxy.mimvp.com/exist.php" static def mimvp_url2 = "https://proxy.mimvp.com/exist.php" static main(args) { // spider_http(MimvpSpider.mimvp_url) // spider_web(MimvpSpider.mimvp_url) spider_proxy(MimvpSpider.mimvp_url, MimvpSpider.proxy_http) // http spider_proxy(MimvpSpider.mimvp_url2, MimvpSpider.proxy_http) // https } // 不需要 groovyx.net.http.HTTPBuilder static spider_http(mimvp_url) { def connection = new URL(mimvp_url).openConnection() connection.setRequestMethod('GET') connection.doOutput = true def writer = new OutputStreamWriter(connection.outputStream) writer.flush() writer.close() connection.connect() def respText = connection.content.text println respText } // 需要 groovyx.net.http.HTTPBuilder // 首先groovy请求http需要依赖HTTPBuilder模块儿,不知道怎么安装模块儿,辗转了半天,后来发现支持Grab语法,代码如下 static spider_web(mimvp_url) { def http = new HTTPBuilder('http://proxy.mimvp.com') // http://proxy.mimvp.com/free.php?proxy=out_hp http.request(GET, TEXT) { uri.path="/free.php" // 请求路由 uri.query = ['proxy' : 'out_hp'] // 请求参数 response.success ={resp, reader-> println resp.statusLine.statusCode // 200 println resp.headers.'Expires' // Thu, 19 Nov 1981 08:52:00 GMT println resp.headers.'Vary' // Accept-Encoding System.out << reader // 网页正文 } response.failure={resp-> println resp.status } } } // 设置代理 static spider_proxy(mimvp_url, proxy) { def http = new HTTPBuilder(mimvp_url) // http.client.getCredentialsProvider().setCredentials( // new AuthScope("myproxy.com", 8080), // new UsernamePasswordCredentials("proxy-username", "proxy-password") // ) def proxy_type = proxy.split("://")[0] def proxy_ip = proxy.split("://")[1].split(":")[0] def proxy_port = proxy.split("://")[1].split(":")[1] proxy_port = proxy_port.toInteger() println proxy_type println proxy_ip println proxy_port // http.setProxy('myproxy.com', 8080, 'http') http.setProxy(proxy_ip, proxy_port, proxy_type) http.ignoreSSLIssues() // 访问https网站,不需验证 http.request( GET, TEXT ){ req -> response.success = { resp, reader -> println "Response: ${reader.text}" } } } }
Java 和 Groovy区别
1. Groovy Hello
vim Hello.groovy
package com.mimvp class HelloGroovy { static main(args) { println("hello mimvp.com") } }
编译执行:
$ groovy Hello.groovy
hello mimvp.com
2. Java Hello
vim Hello.java
package com.mimvp; public class Hello { public static void main(String[] args) { System.out.println("hello mimvp.com"); } }
编译执行:
$ javac com/mimvp/Hello.java // javac 将java源文件Hello.java 编译为class字节码文件 Hello.class
$ java com/mimvp/Hello // java 运行class字节码文件 Hello.java (注:不带.class后缀)
hello mimvp.com
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2017-09-19 01:20:42
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: Groovy 安装与开发 (米扑博客)