2016-10-21 12 views
1

を使用してJavaからRubyのGEMを呼び出そうと私は私が慢性宝石をインストールしたJRubyのは、なぜこの作業ではありません:JRubyの

をインストールしたJRubyの

を経由してJavaで慢性宝石を使用しようとしています

C:\>jruby -S gem list --local 

*** LOCAL GEMS *** 

chronic (0.10.2) 
did_you_mean (default: 1.0.1) 
jar-dependencies (default: 0.3.5) 
... 

私は設定をテストしてきた私の環境設定

C:\>jruby -S gem env 
RubyGems Environment: 
    - RUBYGEMS VERSION: 2.6.6 
    - RUBY VERSION: 2.3.1 (2016-09-07 patchlevel 0) [java] 
    - INSTALLATION DIRECTORY: C:/jruby-9.1.5.0/lib/ruby/gems/shared 
    - USER INSTALLATION DIRECTORY: C:/Users/markw/.gem/jruby/2.3.0 
    - RUBY EXECUTABLE: C:/jruby-9.1.5.0/bin/jruby.exe 
    - EXECUTABLE DIRECTORY: C:/jruby-9.1.5.0/bin 
    - SPEC CACHE DIRECTORY: C:/Users/markw/.gem/specs 
    - SYSTEM CONFIGURATION DIRECTORY: C:/jruby-9.1.5.0/etc 
    - RUBYGEMS PLATFORMS: 
    - ruby 
    - universal-java-1.8 
    - GEM PATHS: 
    - C:/jruby-9.1.5.0/lib/ruby/gems/shared 
    - C:/Users/markw/.gem/jruby/2.3.0 
    - GEM CONFIGURATION: 
    ... 

を確認していますJRubyのIRBでJavaを経由してのJRubyに同じ電話をかける

irb(main):006:0> require 'chronic' 
true 
irb(main):007:0> Chronic.parse('tomorrow') 
2016-10-22 12:00:00 -0700 

は失敗します。

 ... 
     runtime = new ScriptEngineManager().getEngineByName("jruby"); 
     jruby = new StringBuffer(); 

     jruby.append("puts 2+3"); 
     jruby.append("\r\n"); 
     jruby.append("require 'chronic'"); 
     jruby.append("\r\n"); 
     jruby.append("Chronic.parse('tomorrow')"); 

     runtime.eval(jruby.toString()); 
     ... 

OUTPUT:GEM_PATHを検査しようとすると

5 
LoadError: no such file to load -- chronic 
    require at org/jruby/RubyKernel.java:956 
    <main> at <script>:2 

もIRBに動作しますが、中に失敗しましたjava:

 ... 
     runtime.eval("Gem.path"); 
     ... 

出力:

NoMethodError: undefined method `path' for Gem:Module 
    <main> at <script>:1 

明確な設定手順はありますか?

***** ***** UPDATE

グレート提案EricDuminil。論理的に私はそれが動作することを期待しましたが、動作しませんでした。ここに私が得るものがあります:

最初に、jrubyがWindowsインストーラを使ってインストールされたことを言及しておきます。慢性宝石は、Cにインストールされています:\ JRubyの-9.1.5.0 \ libに\ルビー\宝石は\共有:

C:\jruby-9.1.5.0\lib\ruby\gems\shared>tree /A 

+---build_info 
+---cache 
+---doc 
+---extensions 
+---gems 
| +---chronic-0.10.2 
| +---jruby-win32ole-0.8.5 
| +---rake-10.4.2 
| \---rdoc-4.2.0 
... 

IRBでGEM.pathがこのように設定されます。

irb(main):027:0> Gem.path 
["C:/Users/markw/.gem/jruby/2.3.0", "C:/jruby-9.1.5.0/lib/ruby/gems/shared"] 

取りますあなたの提案は、私は同じにENV [GEM_PATH]設定(確認のためにそれをecho'ed):

jruby.append("ENV[\"GEM_PATH\"] = \"C:/Users/markw/.gem/jruby/2.3.0;C:/jruby-9.1.5.0/lib/ruby/gems/shared\""); 
jruby.append("\r\n"); 
jruby.append("puts ENV[\"GEM_PATH\"]"); 
jruby.append("\r\n"); 

OUTPUT:

C:/Users/markw/.gem/jruby/2.3.0;C:/jruby-9.1.5.0/lib/ruby/gems/shared 
LoadError: no such file to load -- chronic 
    require at org/jruby/RubyKernel.java:956 
    <main> at <script>:3 

それ(jruby)はまだそれを見つけるように見えない!

答えて

1

慢性を要する前に、必要な環境変数をルビスクリプト内で定義することができます。

他に必要な変数がわかりません。

+1

おそらく 'ENV [\" GEM_HOME \ "]'も同様に設定する必要があります – kares

関連する問題