WEB-INF/lib
フォルダに配置されていない外部JARファイルをロードするには、org.apache.catalina.loader.WebappLoader
クラスを拡張してカスタムローダークラスを作成しました。カスタムTomcat Webapp Loaderを使用して埋め込みリソースにアクセスする
起動時に、フォルダ(私の場合はcataline_home\plugins\
)をスキャンし、このフォルダ内のすべてのクラス/ jarをWebアプリケーションのクラスパスに追加します。
これはすべて正常に動作しています。使用可能なすべてのクラスがロードされ、アプリケーションから実行することもできます。何らかの理由でこれらのクラスはJAR内のプロパティファイルにアクセスできません。
は、私は、このJAR内の私はプロパティファイルはsms.properties
pluginsms.jar
と呼ばれるJARと呼ばれてきていると私は、このファイルを読むためにResourceBundle resource = ResourceBundle.getBundle("sms");
を使用しています私は、スタンドアロンとしてそれを実行すると、それは完全に正常に動作しますと言うが、私は私の中でそれをロードしようとすると、 Webアプリケーション(カスタムWebappLoader経由で)throw:Resource Not Found Exception
。下記の
は私WebappLoaderのソースです:
public class PluginLoader extends WebappLoader {
@Override
public void setContainer(Container container) {
StandardContext ctx = (StandardContext) container;
try {
File pluginFolder = new File(System.getProperty("catalina.home"),
"plugins");
for (File file : pluginFolder.listFiles()) {
if (file.isDirectory()) {
continue;
}
if (file.getName().endsWith(".jar")) {
addRepository(file.toURI().toString());
}
}
} catch (Exception e) {
e.printStackTrace();
}
super.setContainer(container);
}
}
私が推測して賭けなければならないのなら、これはクラスローダーの委任の問題だと言います。プラグインJARを見ることができないシステムクラスローダーにリソースバンドルを作成しようとしています。 – Perception
これは、デフォルトのクラスローダーを自分でオーバーライドする必要があると思われますか? – Waqas
@Waqas 'Perception'は正しいと思います。アプリケーション/ WEB-INF/classesにsms.propertiesを入れてみてください。それが動作しているかどうかを確認します。または[この質問の選択された回答](http://stackoverflow.com/questions/2815404/load-properties-file-in-jar)でロジックを使用することができます。 –