`
s8186255
  • 浏览: 87881 次
  • 性别: Icon_minigender_1
  • 来自: 新疆乌鲁木齐
社区版块
存档分类
最新评论

ruby通过RJB调用jar包

阅读更多

java从小做大的过程中留下诸多可以重复使用jar包,尤其在企业应用中。各个公司提供的开发包都是以dll或者jar包。要想使得ruby开发走入企业,走入高端,必须有兼容性。jruby调用jar包就像java调用jar一样,但是jruby的特点,这里不再赘述。我们还是看看原始的cruby如何调用jar。

实际上ibm网站上有一篇文章,似乎也是唯一的一篇,说到这个。我这里实际上就是基于这篇文章进行实际操作,并处理诸多问题后的一个学习笔记。

 

jar包是java的一个工具jar打成的一个zip包,除了打包,还可以部署软件。
jar包就是将class打成一个包。

整体思路:
1.安装RJB:gem install rjb。在ruby代码中,require 'rjb',可以在irb环境中做简单测试。以下也是可以这样做。

2.然后配置jar环境,同时需要配置java环境,通过 java -version,可以检测是否正常
Rjb::load(CLASSPATH = '.:/home/saq/app/down/javatar-2.5/jars/tar.jar', jvmargs=[])
注意这里的CLASSPATH是大写,也就是与系统中定义的classpath是一致的。(按照ibm的一篇文章,在这里遇到麻烦。)

3.可以使用这个jar包。
实际上jar包就是一个有目录结构的zip包。如何使用,打开jar包就可以看到。
比如这个javatar-2.5
class-com-ice-tar-*
这里面有许多class。
我们选中一个:TarArchive,使用下面语句
tararchive = Rjb::import('com.ice.tar.TarArchive')
看到如下结果:
=> #<Rjb::Com_ice_tar_TarArchive:0x2aaaae884108>
呵呵,对象创建成功,与前面使用string创建对象类似。

 

完整的案例解释
# 将rjb模块注入,有时候需要同时注入rubygems
require 'rubygems'
require 'rjb'

 

# 注入 jar包,同时配置虚拟机环境,一般缺省,注意这里的classpath,与/etc/profile中的环境变量classpath相同。一般配置为大写CLASSPATH,表示为常量。最好在现有环境测试echo $CLASSPATH,如果有值,则是正确的。下面的写法的自己的理解:.点代表当前的值,:表示并集,与后面的jar包一并是classpath中的内容。所有这个jar包的目录结构务必准确。
Rjb::load(CLASSPATH = '.:/home/saq/app/down/javatar-2.5/jars/tar.jar', jvmargs=[])

 

#使用jar包中的某个类,创建ruby类。参照前面的描述。
tararchive = Rjb::import('com.ice.tar.TarArchive')

#使用java的非jar包,也就是java的原始包中的类,创建对象。文件流类,ruby类。
fileinputstream = Rjb::import('java.io.FileInputStream')

#创建file类,ruby类
file = Rjb::import('java.io.File')

 

#利用三个ruby类创建带有参数的实例

file_instance = file.new_with_sig('Ljava.lang.String;','.')

fileinputstream_instance = fileinputstream.new_with_sig('Ljava.lang.String;','test.tar')#这里将绝对路径写准确,就不会出错。

tararchive_instance = tararchive.new_with_sig('Ljava.io.InputStream;',fileinputstream_instance)

 

p 'Extracting file.....'

 

#调用java类定义的方法。通过_invoke,或者直接调用。
tararchive_instance.extractContents(file_instance)

p 'Done...'

 

假设将上述文件命名为tar.rb
运行:ruby tar.rb,看到
"Extracting file....."
"Done..."
即执行成功

0
0
分享到:
评论
2 楼 trace12 2010-12-18  
这个东东有人实际应用过吗?效率如何阿?
1 楼 vwangzhen 2010-08-10  
    Rjb::load(classpath = ".:#{RAILS_ROOT}/lib/empp.jar", jvmargs=[])
    emppAnswer = Rjb::import('com.wondertek.esmp.esms.empp.EMPPAnswer')
NoClassDefFoundError: com/wondertek/esmp/esms/empp/EMPPAnswer
        from (irb):12:in `import'
        from (irb):12


为什么我每次导改的时候报错
是不是环境配置有错

相关推荐

    利用RJB在Ruby on Rails中使用Java代码的教程

    在Rails应用的初始化文件或者特定的Ruby脚本中,你可以使用RJB的API来装载JAR文件并调用其中的类和方法。 ```ruby require 'rjb' # 加载Java库 Rjb::load('path/to/your/library.jar', ['-classpath']) # 访问...

    SSI框架所用jar包

    这通常通过构建工具如Maven或Gradle来完成,它们可以自动下载并管理所需的jar包,确保项目的正确运行。 5. **SSI与动态语言比较**:虽然SSI提供了一种轻量级的动态内容生成方式,但它功能相对有限,对于复杂的应用...

    Appium自动化jar包

    Appium自动化jar包是用于移动应用自动化测试的重要工具,它基于WebDriver协议,允许开发者使用多种编程语言(如Java、Python、Ruby等)进行自动化测试。在这个压缩包中,包含两个核心的Java库文件:`java-client-...

    appium所需jar包.zip

    在Java环境下,我们需要一些特定的库文件,即jar包,来与Appium进行交互。本资源提供的"appium所需jar包.zip"就是为了在Java开发环境中(如Eclipse或IntelliJ IDEA)搭建Appium测试环境所需的。 首先,为了在Java...

    java轻量网络请求JAR包支持unirest-java-1.4.9.jar

    Unirest 是一个轻量级的 HTTP 请求库,涵盖 Node、Ruby、Java、PHP、Python、Objective-C、.NET 等多种语言。可发起 GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS 请求

    打包ruby EXE程序的OCRA GEM包

    用于打包ruby代码生成EXE程序,最新的GEM包ocra-1.31.gem

    Ruby-qtbindings允许你在Ruby中使用QTGui工具包

    通过qtbindings,Ruby程序员可以直接调用QT的类和方法,创建复杂的窗口应用、控件、布局和信号与槽机制,而无需离开熟悉的Ruby环境。 这个项目的核心在于其绑定技术,它将C++的QT库转换为Ruby可以理解和操作的对象...

    logstash数据从mysql导入es所需mysql的jar包

    首先,`logstash数据从mysql导入es所需mysql的jar包`指的是Logstash需要连接到MySQL数据库,这就需要用到Java Database Connectivity (JDBC) 驱动。MySQL的JDBC驱动是一个Java类库,允许Java应用程序与MySQL数据库...

    Selenium 2.44_2.53 jar包

    Selenium 的 jar 包包含了所有必要的类和库,使得开发者能够在他们的 Java 项目中直接调用 Selenium 提供的 API 来控制浏览器,模拟用户操作。 在 Selenium 2.44 到 2.53 的版本区间内,有一些重要的更新和改进: ...

    Ruby-PyCall从Ruby语言调用Python函数

    Ruby-PyCall是一个非常有用的库,它允许Ruby程序员无缝地调用Python的函数和模块,极大地扩展了Ruby的生态系统。这个库使得两个语言之间的交互变得简单而高效,特别是在需要利用Python的强大科学计算或数据处理能力...

    ruby打包文件ruby入门通

    ruby打包文件ruby打包文件ruby打包文件ruby打包文件ruby打包文件ruby打包文件ruby打包文件ruby打包文件ruby打包文件

    ruby-pack ruby打包工具

    一个将ruby脚本打包成二进制可执行文件的工具,包含源码和一个编译完成的二进制文件!支持跨平台编译,在windows、macOS、linux上均可以成功编译运行!包里的二进制文件是在ubuntu16.04中编译成功的版本!

    ice最简单实现 ruby调用ice接口 - Ruby - language - ITeye论坛

    标题中的“ice最简单实现 ruby调用ice接口”是指在Ruby编程语言中使用ICE(Internet Communication Engine)框架来实现远程方法调用(RPC)。ICE是由ZeroC开发的一种跨平台、高性能的中间件,它允许不同语言的应用...

    selenium所需jar包

    在Java环境下使用Selenium时,我们需要引入相应的jar包以支持其功能。"selenium-server-cloudy.jar" 文件是Selenium的一部分,主要用于搭建服务器,特别是与云测试平台集成。 1. Selenium简介: Selenium 支持多种...

    从Ruby语言调用Python函数-Ruby开发

    您可以将任意Python模块导入Ruby模块,通过从Ruby到Python的自动类型转换来调用Python函数。 支持的Ruby版本pycall.rb支持Ruby 2.3或更高版本。 支持的Python版本pycall.rb支持Python 2.7或更高版本。 请注意,在...

    20141211_selenium RC jar包

    - **配置环境变量**:将Selenium RC的jar包路径添加到系统的`PATH`环境变量中,以便于命令行调用。 3. **启动Selenium RC**:在命令行中运行`java -jar selenium-server.jar`启动Selenium RC服务器。 4. **编写...

    ruby-git, ruby/Git是一个 ruby 库,可以通过将系统调用包装到Git二进制文件来创建读取和操作Git存储库.zip

    ruby-git, ruby/Git是一个 ruby 库,可以通过将系统调用包装到Git二进制文件来创建读取和操作Git存储库 用于 ruby的 Git库在 ruby 中使用Git的库。主页项目源代码的Git public 位于:...

    在Linux下部署的大致所有jar包

    Rubygems-2.7.7.tgz则包含了Ruby的包管理器,用于安装和管理Ruby的库和应用程序。 3. **Zlib**:Zlib是一个广泛使用的压缩库,常用于数据压缩和解压缩。zlib-1.2.11.tar.gz是Zlib的源代码,其在许多软件中作为依赖...

    selenium全部jar

    【Selenium 全部 JAR】是一套...通过结合实际项目需求,正确地使用和配置这些 JAR 文件,能够极大地提升测试的效率和效果。对于想要深入了解 Selenium 或者开发自动化测试框架的人来说,这个压缩包是必不可少的资源。

Global site tag (gtag.js) - Google Analytics