为了加载未放置在我的 Web 应用程序的 WEB-INF/lib
文件夹中的外部 JAR 文件,我通过扩展 org.apache.catalina 编写了一个自定义加载器类。 loader.WebappLoader
类。
它所做的是在启动时扫描文件夹(在我的例子中是 cataline_home\plugins\
)并将此文件夹中的所有类/jar 添加到我的 Web 应用程序的类路径中。
一切正常,它加载了所有可用的类,我什至可以从我的应用程序中执行它们;但出于某种原因,这些类无法访问 JAR 中的属性文件。
假设我有一个名为 pluginsms.jar
的 JAR,在这个 JAR 中我有一个名为 sms.properties
的属性文件,我正在使用 ResourceBundle resource = ResourceBundle。 getBundle("sms");
来读取这个文件,当我独立运行它时它工作得很好但是当我尝试将它加载到我的 web 应用程序中时(通过自定义 WebappLoader)它抛出:Resource未找到异常
。
下面是我的 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);
}
}
最佳答案
我的猜测是您的属性文件位于 WEB-INF 或 Webcontent 文件夹中,并且您正在使用相对路径访问您的属性文件。虽然想要使用此属性文件的 jar 看不到此路径,但这就是您收到此异常的原因。我建议您对属性文件使用静态路径。希望对您有所帮助。
关于java - 通过自定义 Tomcat Webapp Loader 访问嵌入式资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9681488/