Чтобы загрузить внешние файлы JAR, которые не помещены в папку WEB-INF/lib
моего веб-приложения, я написал собственный класс загрузчика, расширив класс org.apache.catalina.loader.WebappLoader
.
При запуске он сканирует папку (в моем случае это cataline_home\plugins\
) и добавляет все классы / файлы в этой папке в путь к классам моего веб-приложения.
Это все работает нормально, загружает все доступные классы, и я даже могу выполнить их из своего приложения; но по какой-то причине эти классы не могут получить доступ к файлам свойств внутри JAR-файлов.
Скажем, у меня есть JAR с именем pluginsms.jar
, внутри этого JAR у меня есть файл свойств с именем sms.properties
, и я использую ResourceBundle resource = ResourceBundle.getBundle("sms");
для чтения этого файла, он прекрасно работает, когда я запускаю его как автономный, но когда я пытаюсь чтобы загрузить его в мое веб-приложение (через пользовательский WebappLoader), оно выдает: 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);
}
}