2016-10-21 5 views
1

Я пытаюсь использовать хронический камень в Java через JRubyПочему это не рабочий: попытка позвонить Руби КАМЕНЬ из Java с помощью JRuby

Я установил JRuby

Я установил хроническую жемчужину

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: 
    ... 

Я проверил конфиг в IRB JRuby в

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

Заставить же вызов JRuby с помощью Java не удается:

 ... 
     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()); 
     ... 

ВЫВОД:

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

Попытка осмотрите GEM_PATH также работает в 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 \ рубин \ самоцветы \ Shared:

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 
... 

GEM.path в IRB установлен на это:

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 для подтверждения):

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"); 

ВЫВОД:

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

Вы можете определить необходимые переменные среды внутри своего рубинового скрипта, прежде чем требовать хронического.

jruby.append("ENV[\"GEM_PATH\"] = \"C:/Users/markw/.gem/jruby/2.3.0\""); 
    jruby.append("\r\n"); 

Я не уверен, какие другие переменные необходимы.

+1

возможно, 'ENV [\" GEM_HOME \ "]' также должен быть установлен – kares

 Смежные вопросы

  • Нет связанных вопросов^_^