加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用来自Clojure的gem中提供的JRuby类

发布时间:2020-12-16 22:06:59 所属栏目:百科 来源:网络整理
导读:我是一个相当简单的需要在Clojure内使用 Ruby类.复杂的因素是该类是以宝石提供的.最佳方法是按照以下方式设置我的Leiningein项目文件: (project foo "" ... :dependencies [[clojure ...] [jruby ... ]]) 同样,我更愿意将gem及其依赖项检查到本地repo目录中
我是一个相当简单的需要在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(注意评论)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读