将gem包打成jar包

阅读更多

http://www.intellij.org.cn/blog/?p=1191

 

Ruby 代码时少不了使用 gem ,当然在 JRuby 中也不例外。如果你在程序中嵌入 JRuby 代码,也就是 embed JRuby 方式,如果 JRuby 脚本还需要用到 gem ,这些 gem 存放在哪里是一个问题。当然你可以在目标服务器上安装 JRuby 环境,然后以标准的 gem 管理方式安装 gem embed JRuby 是可以访问到 jruby.home 信息就可以加载这些 gem ,但是这种方式部署和管理都太麻烦。如果能将这些 gem 打包到一个 jar 文件中,然后放置到运行环境中(如放到 /WEB-INF/lib 目录下),方便 JRuby 脚本引用这些 gem ,那就方便多啦。这个机制其实在 JRuby 1.1.6 中就有啦,地址在: http://blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems-in-a-jar ,本文相当一个介绍,让大家了解这个过程。

1. 首先我们要创建一个 gem repository 目录,存放项目脚本需要引用的 gem ,命令如下:

$ java -jar jruby-complete-1.6.0.jar -S gem install -i ./xxx_gems gem_name –no-rdoc –no-ri

这里我们说明一下, -i 表示安装到指定的目录下,也就是 gem repository 目录,这里为 xxx_gems 目录, gem_name gem 名称,如果要安装多个 gem ,再执行多次换 gem_name 即可。

2. xxx_gems 目录其实就是标准的 gem repository ,包含四个目录 cache doc gems specifications ,其中 specifications 保存 gem repository 中所有 gem gemspec 文件,通过 specifications 目录,我们可以了解仓库中所有 gem 的信息。

3. 接下来我们需要将 gem repository 进行 jar 打包,命令如下:

$ jar cf xxx_gems.jar -C xxx_gems .

这个命令表示将 xxx_gems 目录下的所有文件全部归档到 xxx_gems.jar 这个文件中

4. 最后将 xxx_gems.jar 添加到项目的 classpath 中即可。这里说明一下运行的机制。 JRuby 在运行时,会从 classpath 中扫描 specifications 目录,并将其自动添加到 Gem.path 中,这样 jar 中的 gem 就可以被脚本所使用啦。
通过 gems in Jar 这种方式,将 gem repository 归档到 jar 文件中,然后提供给 JRuby 脚本使用,发布和管理就方便多啦。在实际的项目中,可以将 gem repository jar 放置到 Maven Repository 中,通过 Maven dependency 机制引用就可以啦,非常便捷。

 

http://fox1984.iteye.com/blog/1149442

你可能感兴趣的:(将gem包打成jar包)