我是一个相当简单的需要在Clojure内使用
Ruby类.复杂的因素是该类是以宝石提供的.最佳方法是按照以下方式设置我的Leiningein项目文件:
(project foo "" ... :dependencies [[clojure ...] [jruby ... ]])
同样,我更愿意将gem及其依赖项检查到本地repo目录中.因此,从我的理想用途就是:
(ns bar.baz (require [jruby.something :as jruby]) (def obj (jruby/CreateAnInstance "TheGemClass")) (def result (jruby/CallAMethod obj "method_name" some args))
谢谢.
解决方法
以下是使用JRuby和Clojure获得
hello-world
gem运行的几个步骤的简短列表和几个参考.实际上,这些步骤只是简要介绍了引用的材料如何组合起来(带有一些project.clj条目).第一个参考文献
Haml on Clojure Web App在Yoko Harada(@ yokolet的)博客上,使用了一种稍微不同的方式来调用JRuby,但是包括关于如何编写require(“…”)行的关键说明,用于JRuby和gems类路径.
>将[org.jruby / jruby-complete“1.6.7.2”]添加到您的依赖关系中,并让Leiningen获取依赖关系.
>在项目根目录中创建一个gems目录并将其添加到project.clj中的resource-paths这需要Leiningen 2.请参阅Leiningen source以获取正确的格式.
>说
# see reference 4 GEM_HOME=gems GEM_PATH=gems java -jar ~/.m2/repository/org/jruby/jruby-complete/1.6.7.2/jruby-complete-1.6.7.2.jar -S gem install hello-world
在项目根.
>按上述设置GEM_HOME和GEM_PATH启动您选择的REPL服务. (我用lein2 swank测试了)
>在REPL说下面的内容:
;;; see reference 2,first snippet (let [runtime (JavaEmbedUtils/initialize (list)) evaler (JavaEmbedUtils/newRuntimeAdapter)] (doseq [ruby-expr ["require('rubygems')" "require('gems/hello-world-1.2.0/lib/hello-world')"]] (.eval evaler runtime ruby-expr)))
看到零返回值,以及打印到终端的几行,REPL服务已经开始.
参考文献:
> Haml on Clojure Web App on Yoko Harada(@ yokolet’s)博客
Nick Sieger博客上的JRuby 1.1.6: Gems-in-a-jar
> DirectJRubyEmbedding在JRuby Wiki项目Kenai
> consuming gems from jruby-complete在这里SO(注意评论)