我需要在运行时从在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。
您不想使用System cloassloader-通常只会找到属于Tomcat或JRE的资源。
您要从用于加载WAR文件的类加载器中加载资源。有一对夫妇的方式做到这一点,但 官方 的办法是可以访问的ServletContext(Javadoc中),并调用其中getResource或getClassLoader().getResource上。
ServletContext
getResource
getClassLoader().getResource
如果没有ServletContext可用的文件,则可以使用类加载器“欺骗”您所知道的来自WAR文件的类。就像是
this.getClass().getClassLoader().getResource("xyz");
thisWAR文件中已部署的类在哪里?
this