を使用して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)はまだそれを見つけるように見えない!
おそらく 'ENV [\" GEM_HOME \ "]'も同様に設定する必要があります – kares