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

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

因此,我将我的脚本theScript.sh放在我的src / main / resources目录中(因为,是的,我使用Maven)。 这个目录在classpath中,我已经检查过了。

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

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

你猜怎么着? 是的,“无法找到资源”一直出现在我的日志中。

知道我在这里做错了吗?

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

您不希望使用System cloassloader – 通常只会查找属于Tomcat或JRE的资源。

您希望从用于加载WAR文件的类加载器加载资源。 有几种方法可以做到这一点,但官方的方法是访问ServletContext ( javadoc )并调用getResourcegetClassLoader().getResource

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

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

this是您在WAR文件中部署的类。

你尝试过getClass()。getClassLoader()。getResource()或getResourceAsStream()吗?如果它在类路径中,它们应该得到它。