JRuby——Java和Ruby的强强联合

什么是JRuby

JRuby是一个纯Java实现的Ruby解释器。通过JRuby,你可以在JVM上直接运行Ruby程序,调用Java的类库。很多Java编写的Ruby IDE都是使用JRuby来解释语法的。

JRuby,JVM下的一个开源Ruby解释器,能够在Java里面使用Ruby类库。就像标准的Ruby解释器一样,除开使用Ruby调用本地方法(C代码)或者Java类库以外,Ruby代码都能够在JRuby里面正确执行。

为什么JRuby

除了适合用来开发面向Internet 的Web 应用之外,还有很多公司将JRuby 看作是使Rails 进入企业应用的关键技术,例如ThoughtWorks。JRuby 允许Rails 应用部署在流行的Java 应用服务器中,很多企业早已建立了这样的运行环境,但因为某些原因无法为运行Rails 应用建立一个全新的运行环境。任何技术的流行,深究起来,其背后都有经济上的原因。Rails 能够达到5 倍于SSH 的开发效率,使它成为了一个几乎无法被抗拒的选择。Rails 进入企业应用,只是一个时间问题,它的前景十分光明。

下载和安装JRuby

到JRuby的官方网站: http://jruby.org/

                       图:JRuby官方网站截图

下载最新版本的JRuby。这里边有windows版本和linux还有macos版本的,你可以根据你自己的环境下载相应的版本。

下载完成之后解压缩,然后到解压后的目录,我们下文中提到的目录<JRUBY_HOME>就是默认的解压根目录。

在<JRUBY_HOME>下执行bin\jruby -v

如果出现如下提示则表示成功运行:

             图:验证JRuby是否成功运行

运行第一个JRuby程序

在<JRUBY_HOME>下的samples目录下新建文件random.rb,加入如下程序:

1 require 'java'
2 include_class 'java.util.Random'
3 r = Random.new(123)
4 puts "Some random number #{r.nextInt % 10}"
5 r.seed = 456
6 puts "Another random number #{r.nextInt % 10}"

然后执行如下命令:

            图:运行JRuby random.rb

就会得到对应的结果。

其中Java调用JRuby和JRuby调用Java的例子可以在下面的链接中看到,写的很详细:

https://github.com/jruby/jruby/wiki/JRubyAndJavaCodeExamples

在JRuby运行Swing

在上面的例子运行成功后,我们接下来运行swing的例子,在sample目录下新建文件swing2.rb,输入如下内容:

 1 # Import Java packages
 2 include Java
 3 
 4 import javax.swing.JFrame
 5 
 6 frame = JFrame.new("Hello Swing")
 7 button = javax.swing.JButton.new("Klick Me!")
 8 button.add_action_listener do |evt|
 9   javax.swing.JOptionPane.showMessageDialog(nil, <<EOS)
10 <html>Hello from <b><u>JRuby</u></b>.<br>
11 Button '#{evt.getActionCommand()}' clicked.
12 EOS
13 end
14 
15 # Add the button to the frame
16 frame.get_content_pane.add(button)
17 
18 # Show frame
19 frame.set_default_close_operation(JFrame::EXIT_ON_CLOSE)
20 frame.pack
21 frame.visible = true

然后执行bin\jruby samples\swing2.rb

我们可以看到调用的Swing程序:

        图:JRuby调用Swing程序

使用netbeans开发JRuby

到netbeans官方网站上下载

http://netbeans.org/

netbeans,因为最新版本安装这个插件有问题,所以这里下载的是netbeans7.1.1。

安装完成后到netbeans选择菜单“工具->插件”,将出现如下界面:

                       图:netbeans安装Ruby插件的界面

然后按照这篇文章中的描述,下载对应的文件,选择安装:

http://blog.enebo.com/2012/01/workaround-for-ruby-support-on-netbeans.html

然后点击“工具->Ruby平台”,配置Ruby环境,因为我们选用的是JRuby,所以这里配置解析器为JRuby。

                  图:JRuby平台的环境配置

新建一个ruby应用

                  图:新建Ruby应用

然后选择工作空间和编译环境:

                  图:选择工程空间和编译环境

点击完成,然后在生成的main.rb文件中输入:

 1 class ADuck
 2     def quack()
 3         puts "quack A";
 4     end
 5 end
 6 
 7 class BDuck
 8     def quack()
 9         puts "quack B";
10     end
11 end
12 
13 # quack_it doesn't care about the type of the argument duck, as long
14 # as it has a method called quack. Classes A and B have no
15 # inheritance relationship.
16 def quack_it(duck)
17     duck.quack
18 end
19 
20 a = ADuck.new
21 b = BDuck.new
22 quack_it(a)
23 quack_it(b)

点击运行或者按F6,就可以看到运行的结果。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Cassandra和ElasticSearch设置Titan Graph数据库

Titan是一个高度可扩展的开源图形数据库。图形数据库是一种NoSQL数据库,其中所有数据都存储为节点(nodes)和边(edges)。图形数据库适用于高度连接...

15720
来自专栏蜉蝣禅修之道

fs学习笔记之输出格式

20830
来自专栏张善友的专栏

WCF 消息帧格式

在TCP/IP协议栈中,当数据通过协议栈向下流动时,每一层都要给数据增加控制信息用于确保正确的传递。控制信息放置在被传送数据的开始,称之为包头,这种在协议栈中每...

19080
来自专栏Deep learning进阶路

caffe随记(四) --- mnist示例超详细讲解

这个mnist手写体数字识别的例子可以说是caffe中的 Hello World。mnist最初用于支票上的手写数字识别,针对mnist识别的专门模型是Lene...

29000
来自专栏有困难要上,没有困难创造困难也要上!

Tensorflow限制CPU个数

636100
来自专栏Java帮帮-微信公众号-技术文章全总结

Mysql批量插入分析【面试+工作】

最近发现几个项目中都有批次插入数据库的功能,每个项目中批次插入的写法有一些差别,所以本文打算对Mysql的批次插入做一个详细的分析。

37220
来自专栏简书专栏

目标检测第1步-运行tensorflow官方示例

在进行本文操作之前,需要先安装好tensorflow的gpu版本。 本文作者的环境:python3.6、Windows10、tensorflow_gpu1.1...

1.2K30
来自专栏林德熙的博客

C# 使用转换语义版本号

本文告诉大家如何转换语义版本号,那么什么是语义版本号,语义版本号(semantic version)就是版本号带 alpha 等的版本号

13110
来自专栏Phoenix的Android之旅

如何跨app对其他应用进行虚拟点击

可能很多人在Android开发中会有这样的想法,如何模拟屏幕点击,向另外的app发送点击事件,来达到某种目的。 就像我们平时用 adb shell sendev...

14410
来自专栏人工智能LeadAI

在NVIDIA Jetson TX2上安装TensorFlow

刷机的目的是把Ubuntu操作系统和JetPack SDK安装到Jetson TX2上。刷机的操作按照官方教程即可,比较容易。这个过程中有一点需要注意:Jets...

38520

扫码关注云+社区

领取腾讯云代金券