ライブラリ Overthere 2.3.1 を使用するクライアントを開発しています。ローカル マシンのクライアントでは完全に動作します。しかし、EJB 3.0 に含まれている同じコードを呼び出そうとすると、必要なすべてのクラスがロードされていないという例外が発生します。
ソースを調べたところ、クラスにハードコードされたクラス名を持つプロトコル注釈スキャナー ( https://github.com/hierynomus/scannit ) が含まれていることがわかりました。
Scannit scannit = new Scannit(Configuration.config()
.scan("com.xebialabs")
.with(new AbstractScanner[] { new TypeAnnotationScanner() }));
コマンド
Thread.currentThread().getContextClassLoader().getResources("com/xebialabs")
null を返します。
EJB は、すべての jar にアクセスできない別のクラスローダーで実行されているようです。
EJB は、次の構造で EAR にパックされます。
EAR
--META-INF
----sda-dd.xml
----SAP_MANIFEST.MF
----MANIFEST.MF
----application-j2ee-engine.xml
--ejb.jar
--extlibs.jars
MANIFEST.MF ファイルには、CLASS-PATH 内の外部ライブラリへの参照が含まれていません。EAR プロジェクトがアプリケーション サーバーに正常にデプロイされました。
EJB.jar には、値が "Class-Path: ." の META-INF/MANIFEST.MF も含まれています。デフォルトで。
マニフェスト ファイルで CLASS-PATH をいじってみましたが、うまくいきません。
EJB の実行中にロードされるすべての外部ライブラリを使用してプロジェクトをビルドする方法を教えてください。リソースとクラスローダーで見逃したものは何ですか?