jruby的好处是可以同时利用ruby和java这两大社区的积累,那么我们怎么在ruby代码中装载java资源呢。
装载java资源之前,先要require一下java,否则后续会有一些功能不能执行。
jruby-1.5.6 :001 > require 'java'
=> true
下面具体进行装载,首先是load相关的jar文件,jruby进程本质上就是jvm进程,所以可以直接指定启动jvm时的classpath。
当然,我们还可以用代码来动态的完成这个工作:
jruby-1.5.6 :002 > require 'java/jars/commons-logging-1.1.1.jar'
=> true
jruby-1.5.6 :003 > require 'java/jars/spring-2.5.6.jar'
=> true
对于类装载而言,还有一种情况,就是没有打包为jar的那些class文件,java的做法是在classpath中设置,jruby对此也提供了动态载入的方式
003 > $CLASSPATH << "java/conf/"
=> ["file:java/conf/"]
接下来就可以直接使用了
jruby-1.5.6 :004 > puts org.springframework.context.support.ClassPathXmlApplicationContext
Java::OrgSpringframeworkContextSupport::ClassPathXmlApplicationContext
=> nil
显然,在jruby中,普通的java类被装载到了用模块组织的命名空间中,如果需要简化使用,可以这样:
jruby-1.5.6 :005 > include Java::OrgSpringframeworkContextSupport
=> Object
然后可以简化代码
jruby-1.5.6 :006 > puts ClassPathXmlApplicationContext.class
Class
jruby-1.5.6 :007 > puts ClassPathXmlApplicationContext.new
org.springframework.context.support.ClassPathXmlApplicationContext@4b0613aa: display name
[org.springframework.context.support.ClassPathXmlApplicationContext@4b0613aa]; startup date
[Thu Jan 01 08:00:00 CST 1970]; root of context hierarchy
当然,如果你对java更熟悉,那么也可以用更java的方式做这件事
jruby-1.5.6 :008 > java_import java.lang.System
=> Java::JavaLang::System
jruby-1.5.6 :009 > puts System.class
Class
=> nil
但是这种方法不能导入一个包,因为 java.lang.System 不是一个对象,所以有一个 include_package 方法
jruby-1.5.6 :010 > include_package 'java.lang'
NoMethodError: undefined method `include_package' for #<Object:0x7023d08b>
from (irb):10
jruby-1.5.6 :011 > module X
jruby-1.5.6 :012 > include_package 'java.lang'
jruby-1.5.6 :013 > end
jruby-1.5.6 :014 > puts X::Long
Java::JavaLang::Long
=> nil
也许你注意到了,使用include_package需要在一个module中,因为include_package这个方法是定义在核心库的Module类中的,我猜这么做是为了防止命名空间污染(有兴趣的同学可以看看Module类的源码,里面有 const_missing 相关的代码)
类资源装载大致就是这样,当然,这些都是在同一个classloader中,其实个人认为,有了ruby的动态能力支持和module作为作用域空间,classloader这种东西可以尽量少用了
更多了解,可以看看 https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby
最后说明一下,混合语言编程并不是个好主意,那样代码会比较难以维护。比较好的方式是,首先划清界限,然后在ruby中引入java服务接口,这是一种既可行又好用的方法。
分享到:
相关推荐
- **与 Java 库的无缝集成**:JRuby 可以直接调用 Java 类库,使开发者可以利用 Java 生态系统中的丰富资源。 - **线程安全**:得益于 JVM 的线程模型,JRuby 具有良好的多线程支持。 **2. JRuby 1.7.8 版本特性** ...
《JRuby和Rails-让Ruby语言融入于Java项目》是一本深入探讨如何在Java环境中使用JRuby和Rails框架的教程。这本书旨在帮助开发者理解和实践如何将Ruby on Rails的灵活性和生产力引入到Java企业级开发中,从而提升软件...
为了开始使用JRuby,你需要下载并安装JRuby,配置环境变量,然后可以像使用普通Ruby那样运行Ruby代码。开发过程中,你可以使用像`jirb`(JRuby交互式 shell)这样的工具,或者通过`bundle`管理Gem(Ruby的包管理系统...
标题 "org.jruby.rar" 暗示我们正在讨论一个与 JRuby 相关的压缩文件,其中可能包含了 JRuby 的源代码、库文件或者其他相关资源。JRuby 是一种 Java 实现的 Ruby 解释器,它允许 Ruby 代码在 JVM(Java 虚拟机)上...
这对于学习如何在Java环境中实现动态语言,或者想要为JRuby贡献代码的人来说是极其宝贵的资源。 此外,标签“eclipse-jruby”暗示了可能有一个Eclipse插件用于支持JRuby的开发。Eclipse是一款流行的开源集成开发...
然而,作为一种相对较新的语言,Ruby在某些场景下的性能可能不及Java,而且在企业级应用中可能缺乏Java那样的广泛支持。 在新技术采纳的模型中,我们可以参考Geoffrey A. Moore的理论,他提出的技术鸿沟理论解释了...
JRuby 是一个基于 Java 平台的 Ruby 实现,它允许开发者利用 Ruby 语言的优势同时享受 Java 生态系统的强大功能。在本文中,我们将详细探讨如何安装和配置 JRuby,特别是针对 JRuby 1.1.2 版本与 Java 1.6。 **一、...
《jRuby on Rails WEB2.0》不仅是对于希望将Ruby on Rails技术引入Java平台的开发者来说是一本宝贵的资源,也是所有对敏捷开发、Web 2.0应用感兴趣的技术人员的重要参考资料。通过本书的学习,读者不仅能够掌握jRuby...
jruby与java使用开发,听说jruby能是swing的调用变为更简单
4. **Rails支持**:对于Web开发,JRuby支持Ruby on Rails框架,可以在Windows环境下搭建高效稳定的Rails应用服务器。 5. **并发性**:JVM的线程模型为JRuby提供了良好的并发支持,适合处理高并发场景。 **JRuby ...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
经典版本Java 环境配套 jruby-complete-9.3.14.0 Java 开发者必备配套环境组件 jruby 目前为较新版本 可以符合大部分开发环境
JRuby是Java平台上的一个实现,它允许开发者使用Ruby语言编写程序,并且能够无缝地运行在Java虚拟机(JVM)上。...对于那些对混合编程环境感兴趣或者希望在现有Java项目中引入Ruby元素的人来说,这是一个有价值的资源。
标题 "jruby-core-1.7.12.zip" 提供的是 JRuby 的核心库版本 1.7.12,这是一个将 Java 虚拟机(JVM)与 Ruby 语言结合的开源实现。JRuby 允许开发者在 Java 平台上运行 Ruby 代码,同时利用 Java 生态系统的强大功能...
JRuby是Java平台上的一个实现,它允许开发者在Java虚拟机(JVM)上运行Ruby编程语言。这个“jruby-bin-1.3.1.zip”压缩包是JRuby的一个早期版本,专为Ruby语言的研发提供必要的工具和环境。在这个版本中,重点是兼容...
2. **兼容性**:JRuby可以调用Java类库,这意味着开发者可以利用Java生态系统中的丰富资源,如数据库驱动、企业服务总线(ESB)、消息队列等。 3. **跨平台**:基于JVM,JRuby可以在任何支持JVM的操作系统上运行,...
**标签:“jruby”**:这个标签直接指出了主题,即 JRuby,它是Ruby语言的一个重要分支,专注于在Java环境中提供对Ruby的支持。 **压缩包子文件的文件名称列表:**"jruby-0.9.0" 指示了在解压后,我们得到的是JRUBY...
标题 "jruby-1.5.5+OperaWatir+RSpec" 暗示了这是一个关于使用 JRuby 1.5.5 版本、OperaWatir 和 RSpec 进行自动化测试的项目或者资源集合。现在,我们将深入探讨这三个关键组件以及它们在 IT 领域中的应用。 JRuby...
JRuby是面向Ruby、基于Java虚拟机(JVM)的一种解释程序,它结合了Ruby语言的简易性和功能强大的JVM的执行机制,包括与Java库 全面集成。Rails彻底加快及简化了Web应用的开发,不过它让人觉得不够成熟,特别是在高端...