2016-06-06 3 views
0

У меня есть проект на основе JRuby на рельсах, теперь я переношу этот проект в версию jruby-9.0.5.0.Класс Jruby «RuntimeHelpers» устарел

В коде, рубин вызывается из Java-файла, как показано ниже:

String source = new StringBuilder("require 'java'\n" + 
     "\n" + 
     "java_package 'jrubysource'\n" + 

     "class SystemFilePath\n" + 
     " attr_accessor :topDirCmd, :topDirNames\n" + 
     " java_signature 'SystemFilePath(String topDirCmd)'\n" + 
     " def initialize(topDirCmd)\n" + 
     " @topDirCmd = topDirCmd\n" + 
     " setTopDirectoryNames()\n" + 
     " end\n" + 
     "\n" + 
     " java_signature 'void setTopDirectoryNames()'\n" + 
     " def setTopDirectoryNames\n" + 
     " Open3.popen3(@topDirCmd) { |stdin, stdout, stderr, wait_thread|\n" + 
     "  out = stdout.read\n" + 
     "  err = stderr.read\n" + 
     "  if err.size > 0 || out.size == 0\n" + 
     "  @topDirNames = nil\n" + 
     "  return\n" + 
     "  end\n" + 
     "  out = out.split(/\\n/).select{|a| a.match(/system_1/) && !a.match(/system_1\\/sim/)}.join(\"\\n\") + \"\\n\";\n" + 
     "  topDirNames = out.split(/\\//).select{|a| a.match(/\\n$/) }.map(&:chomp)\n" + 
     "  if topDirNames.size == 0 then\n" + 
     "  @topDirNames = nil\n" + 
     "  return\n" + 
     "  end\n" + 
     "  @topDirNames = topDirNames.sort.reverse\n" + 
     " }\n" + 
     " rescue Exception => e\n" + 
     " @topDirNames = nil\n" + 
     " end\n" + 
     "\n" + 
     "end\n" + 
     "").toString(); 
    __ruby__.executeScript(source, "system_file_path.rb"); 
    RubyClass metaclass = __ruby__.getClass("SystemFilePath"); 
    metaclass.setRubyStaticAllocator(SystemFilePath.class); 
    if (metaclass == null) throw new NoClassDefFoundError("Could not load Ruby class: SystemFilePath"); 
    __metaclass__ = metaclass; 
     } 


public void setTopDirectoryNames() { 
    @SuppressWarnings("unused") 
    IRubyObject ruby_result = RuntimeHelpers.invoke(__ruby__.getCurrentContext(), this, "setTopDirectoryNames"); //Here i am calling ruby code from java file. 
     return; 
} 

Теперь, в соответствии с устаревшим классом JRuby API document «RuntimeHelpers».

В документе нет альтернативного API. Пожалуйста, направляйте меня на альтернативу, поскольку это блокиратор для меня.

+0

осуждается не означает, что вы можете Не используйте его, просто не надо. Если в настоящее время нет альтернатив, я бы, вероятно, сейчас проигнорировал это предупреждение и исправлю его позже. Я понимаю, что это, вероятно, ужасный совет в зависимости от состояния проекта. – xyious

ответ

1

сво внутренний JRuby API ... у вас есть аналогичные API доступны для каждого IRubyObject:

вместо

RuntimeHelpers.invoke(__ruby__.getCurrentContext(), this, "setTopDirectoryNames") 

попробовать:

this.callMethod(__ruby__.getCurrentContext(), "setTopDirectoryNames") 
+0

Спасибо !!!!! this.callMethod (__ ruby ​​__. GetCurrentContext(), "setTopDirectoryNames") работал :) – user3253461

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

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