一尘不染

如何在运行时在WAR中找到非Java资源?

tomcat

我需要在运行时从在Tomcat上运行的WAR运行shell脚本。

因此,我将脚本theScript.sh放在了src / main /
resources目录中(因为,是的,我使用了Maven)。该目录在类路径中,我已经检查了它。

在代码中,我想将脚本复制到temp目录中。所以我试图通过我的ClassLoader来获取它:

URL myURL = ClassLoader.getSystemResource("theScript.sh");
if (myURL == null) {
    LOG.error("Couldn't find the resource");
}

你猜怎么着?是的,“找不到资源”始终出现在我的日志中。

知道我在做什么错吗?

我的环境是传统的Eclipse / Tomcat。


阅读 285

收藏
2020-06-16

共1个答案

一尘不染

您不想使用System cloassloader-通常只会找到属于Tomcat或JRE的资源。

您要从用于加载WAR文件的类加载器中加载资源。有一对夫妇的方式做到这一点,但 官方
的办法是可以访问的ServletContextJavadoc中),并调用其中getResourcegetClassLoader().getResource上。

如果没有ServletContext可用的文件,则可以使用类加载器“欺骗”您所知道的来自WAR文件的类。就像是

this.getClass().getClassLoader().getResource("xyz");

thisWAR文件中已部署的类在哪里?

2020-06-16