如何在运行时在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 )并调用getResource
或getClassLoader().getResource
。
如果您没有可用的ServletContext
,那么您可以通过使用类加载器来“欺骗”您知道来自WAR文件的类。 就像是
this.getClass().getClassLoader().getResource("xyz");
this
是您在WAR文件中部署的类。
你尝试过getClass()。getClassLoader()。getResource()或getResourceAsStream()吗?如果它在类路径中,它们应该得到它。