Использование пользовательского файла класса Java в Jruby
-
01-10-2019 - |
Вопрос
Я пытаюсь выполнить какой-то пользовательский код Java через последнюю версию JRuby (1.5.1), Ruby 1.8.7, с Java 1.6.0_06. Я попробовал как класс файла, так и вкладывая его в метод JAR. Когда я попробую
require 'java'
require 'path_to_class/myClass
или
require 'java'
require 'path_to_jar/a_jar.jar
Попробуйте оба метода, я не могу получить доступ к MyClass, ни любым другим файлам в файле JAR. Другие вариации в сети для импорта классов Java приводят к следующей ошибке:
`NameError: cannot load Java class com.package.myClass from C:/jruby-1.5.1/lib/ruby/site_ruby/shared/builtin/javasupport/java.rb:51:in method_missing`
Я также проверил решения на StackoverFlow, и я все еще получаю тот же результат. Мне интересно, может ли это проблемой на более глубоком уровне.
Решение
Вместо того, чтобы «требовать» вы хотите «Java_import».
require 'java'
java_import com.package.MyClass
Видеть JRuby: Import VS включает vs java_import vs include_class Для некоторого обсуждения, например, почему вы должны использовать «Java_import» вместо просто «импорт»
Другие советы
Если у вас есть класс Java com.mypackage.MyClass
В той же папке или в папке, присутствующей на классном папке, вы можете назвать его из вашего сценария JRUBY, как это:
require 'java'
import com.pack.MyClass
myClass = MyClass.new
Если класс в банке, вы должны require
банка:
require 'java'
require '/path/to/myjar.jar'
import com.pack.MyClass
myClass = MyClass.new
Если myjar.jar
находится в классе, вы можете просто использовать require 'myjar.jar'
.
Ты пробовал include Java
?
Смотрите это для более подробной информации: http://blogs.orcle.com/coolstuff/entry/using_java_classes_in_jruby.
Так вот то, что работал на меня, у меня были все необходимые вещи, которые предложили люди, но то, что мне действительно нужно было
$CLASSPATH << (Rails.root.to_s + "/path/to/dotClassFolder")
Перед заявлением Java_import
Так что в файловой системе, если ваш класс был в папке
Rails.root/path/to/dotClassFolder/folder/anotherFolder/MyClass.class
Включать $CLASSPATH << (Rails.root.to_s + "/path/to/dotClassFolder")
тогда java_import "folder.anotherFolder.MyClass"
Видеть
От .class файлов раздел https://github.com/jruby/jruby/wiki/callingjavafromjruby.