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

时间:2011-11-02 01:26:18

标签: java shell tomcat classloader war

我需要在运行时从我在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。

2 个答案:

答案 0 :(得分:3)

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

您希望从用于加载WAR文件的类加载器加载资源。 有几种方法可以做到这一点,但官方方式是访问ServletContextjavadoc)并调用getResource或{{ 1}}就此而言。

如果您没有getClassLoader().getResource可用,则可以使用类加载器为您知道来自WAR文件的类“作弊”。像

这样的东西
ServletContext

其中this.getClass().getClassLoader().getResource("xyz"); 是您在WAR文件中部署的类。

答案 1 :(得分:0)

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

相关问题