2014-10-09 3 views
1

У меня есть файл jar, который имеет класс, который я хотел бы использовать из моего проекта Rails. Я попытался импортировать класс с Rjb с помощью этих команд. Файл jar находится в каталоге bin.Как импортировать классы с Ruby Java Bridge

Rjb.load("#{Rails.root}/bin") 
=> nil 
Rjb::add_jar("excel_tools.jar") 
=> true 
Rjb::import("tools.CellEditor") 
ClassNotFoundException: tools.CellEditor 
Rjb::import("tools/CellEditor") 
ClassNotFoundException: tools.CellEditor 

Название класса "tools.CellEditor" должно быть правильным. По крайней мере, когда я перечисляю классы в банке в терминале, я получаю это и многие другие классы от apache poi и log4j.

$ jar tvf bin/excel_tools.jar 
6926 Mon Aug 25 13:24:00 EEST 2014 tools/CellEditor.class 

Любая идея, когда загрузка контейнера или кладки идет не так?

+0

Любая причина, почему использование МРТ вместо JRuby? Rjb –

+0

Мои предыдущие впечатления от JRuby не были очень обнадеживающими. У него были проблемы со совместимостью. Может быть, через год или два он поправится. И проблема времени запуска должна быть решена. – Mika

ответ

2

Я получил эту работу, импортируя все файлы jar, от которых зависит класс java. Недостаточно, чтобы баны зависимости были объединены в другой файл jar с моим классом, их нужно загружать отдельно, прежде чем импортировать класс.

Я скопировал все банки в каталог java_libs и написал инициализатор как этот

require 'rjb' 

JARS = Dir.glob("#{Rails.root}/lib/java_libs/*.jar").join(':') 
Rjb::load(JARS) 
CELL_EDITOR = Rjb::import('tools.CellEditor') 

Теперь я могу использовать CELL_EDITOR методы в любом месте в моем коде.

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