1

Rails プロジェクトから使用したいクラスを含む jar ファイルがあります。これらのコマンドを使用して、Rjb でクラスをインポートしようとしました。jar ファイルは bin ディレクトリにあります。

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」は正しいはずです。少なくともターミナルで jar 内のクラスを一覧表示すると、Apache poi と log4j からこれとさらに多くのクラスが取得されます。

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

jar またはクラスのローディングがどこでうまくいかないか考えていますか?

4

1 に答える 1

2

Javaクラスが依存するすべてのjarファイルをインポートすることで、これが機能しました。依存関係の jar をクラスと一緒に別の jar ファイルにバンドルするだけでは十分ではありません。クラス自体をインポートする前に、それらを個別にロードする必要があります。

すべての 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これで、コードのどこでもメソッドを使用できるようになりました。

于 2014-10-14T06:20:28.283 に答える