`
fsword
  • 浏览: 165670 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jruby环境下装载java资源

阅读更多

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服务接口,这是一种既可行又好用的方法。

2
1
分享到:
评论

相关推荐

    JRuby在Java测试中的应用

    JRuby在Java测试中的应用,使用脚本语言,高效快进行Java程序测试。

    jruby开发----jar

    jruby与java使用开发,听说jruby能是swing的调用变为更简单

    巧妙规避Java与Ruby语言迁移过程中的风险

    “使用Ruby具有风险”是一种普遍的看法,因为使用新的语言天生是有风险的。随着Ruby on Rails逐步进入到主流的开发领域中,这样的风险将会随时间逐渐降低,...本文将要探讨Java与Ruby语言迁移时风险预测方面的问题。

    Ruby-JRuby一个Ruby语言的Java实现

    JRuby - 一个Ruby语言的Java实现,Ruby在JVM上的实现

    jruby_windows1.7and bin1.7

    JRuby是面向Ruby、基于Java虚拟机(JVM)的一种解释程序,它结合了Ruby语言的简易性和功能强大的JVM的执行机制,包括与Java库 全面集成。Rails彻底加快及简化了Web应用的开发,不过它让人觉得不够成熟,特别是在高端...

    jruby1.7.8版本呢

    jruby是一个ruby的解析器,可将ruby解析为java文件,jruby作为ruby解析器时刻调用java代码

    JRuby语言实战技术

    JRuby语言实战技术,java下运用ruby

    JRuby+Swing是开发人员钟情的选择

    JRuby是用于Java平台的一个Ruby实现。它使您可以通过JVM执行Ruby代码。在JRuby下运行的Ruby代码还可以装载和使用Java库,包括Swing。所以JRuby+Swing的组合,也成为了开发人员的选择之一。

    JRuby和Rails-让Ruby语言融入于Java项目.rar

    JRuby和Rails-让Ruby语言融入于Java项目

    如何安装与配置JRuby

    本文介绍了JRuby的安装与配置。JRuby的安装需要JRuby以及JDK,本文使用的版本分别是JRuby 1.1.2以及Java 1.6。至于JRuby配置,文章主要介绍了测试JRuby安装的方法。

    Using JRuby.pdf.英文原版. JRuby教程

    Now you can bring the best of Ruby into the world of Java, with Using JRuby. Come to the source for the JRuby core team’s insights and insider tips. You’ll learn how to call Java objects seamlessly ...

    Java资源包01

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    jruby-complete-1.7.19.jar

    jruby-complete-1.7.19.jar,java版本的ruby解析器

    jruby-bin-1.5.5.zip java脚本编程

    jruby-bin-1.5.5.zip java脚本编程 jruby-bin-1.5.5.zip java脚本编程

    Deploying.with.JRuby.9k.Deliver.Scalable.Web.Apps.Using.JVM

    This new edition has new chapters on Puma, performance tuning, and Java integration, and is updated to the latest versions of JRuby 9k, Rails 4, and JDK 8. JRuby is a fast, scalable, and powerful ...

    Java 版的 Ruby 解释器 JRuby 1.7.14 发布

    JRuby,一个采用纯Java实现的Ruby解释器,由JRuby团队开发。它是一个自由软件,在CPL/GPL/LGPL三种许可协议下发布。

    如何在NetBeans环境下进行JRuby开发

    JRuby是在著名的Ruby编程语言的基础上的纯Java的一种实现,它是动态的,开源的编程语言,特色是简单,具有很高的开发效率。Ruby具有很好的语法,编程语句读起来很自然,并且很容易编写。这篇文章给你演示如何使用...

    jruby-rack:用于JRuby和Java应用服务器的机架

    JRuby机架JRuby-Rack是Java Servlet环境的轻量级适配器,它允许任何(基于Ruby)Rack的应用程序在Java Servlet容器中未经修改地运行。 JRuby-Rack支持Rails以及任何与Rack兼容的Ruby Web框架。 有关Rack的更多信息,...

    jruby-dist-9.1.15.0-bin.zip

    JRuby是面向Ruby、基于Java虚拟机(JVM)的一种解释程序,它结合了Ruby语言的简易性和功能强大的JVM的执行机制,包括与Java库 全面集成。 截至2017.12.08最新稳定版 JRuby 官方更新说明: JRuby 9.1.x is our current ...

    jruby-src-1.0

    jruby-src-1.0.zip

Global site tag (gtag.js) - Google Analytics