使用 getResourceAsStream 在 Tomcat 中加载 JAR 中的文件
有没有办法使用 Tomcat 应用程序中的 getResourceAsStream 加载存储在 JAR 中的文件?
我有一个库,它将所需的所有文件以及已编译的类放入其 jar 中。当该库在独立应用程序中使用时,此代码有效,但在 Tomcat 中使用该库时(使用 PHP java-bridge)则无效。
final InputStream stream = Object.class.getResourceAsStream("/styles/foo.xsl");
我尝试使用问题中概述的解决方案但没有成功 getResourceAsStream not在webapp中加载资源并将代码更改为
final ClassLoader resourceLoader = Thread.currentThread().getContextClassLoader();
final InputStream stream = resourceLoader.getResourceAsStream("/styles/foo.xsl");
后一个代码无论是独立使用该库还是在Tomcat中使用该库都不起作用。在这两种情况下stream == null
。
我尝试加载的文件正确存储在 JAR 中的 /styles/foo.xsl
中。包含所有类和其他文件的 JAR 为 tomcat/webapps/iJavaBridge/WEB-INF/lib/
。
有人可以建议一段可以在 Tomcat 和非 Tomcat 应用程序中运行的代码吗?
Is there a way to load files stored inside JARs using getResourceAsStream
from Tomcat applications?
I have a library that puts all the files it needs inside its jar, along with the compiled classes. This code works when the library is used in standalone applications but not when the library is used inside Tomcat (using the PHP java-bridge).
final InputStream stream = Object.class.getResourceAsStream("/styles/foo.xsl");
I tried without success to use the solution outlined in question getResourceAsStream not loading resource in webapp and changed the code to
final ClassLoader resourceLoader = Thread.currentThread().getContextClassLoader();
final InputStream stream = resourceLoader.getResourceAsStream("/styles/foo.xsl");
The latter code does not work neither when the library is used standalone or when the library is used in Tomcat. In both cases stream == null
.
The file I am trying to load is correctly stored on the JAR in /styles/foo.xsl
. The JAR with all the classes and these other files is tomcat/webapps/iJavaBridge/WEB-INF/lib/
.
Can someone suggest a piece of code that works both in Tomcat and non-Tomcat applications?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要从路径中删除前导斜杠。这仅适用于不在类路径根目录上操作的类加载器。
You need to remove the leading slash from the path. That would only work with classloaders which do not operate on the classpath root.
如果您在包含 xsl 的 jar 中获得了类文件,请尝试以下操作:
最终类加载器resourceLoader = com.mypackage.MyClassInJar.class.getClassloader();
最终InputStream流=resourceLoader.getResourceAsStream(“/styles/foo.xsl”);
如果没有类,则创建一个虚拟类。
我认为这应该可行,因为你总是会让类加载器负责 jar 。
if you got a class file in the jar with the xsl try the following:
final ClassLoader resourceLoader = com.mypackage.MyClassInJar.class.getClassloader();
final InputStream stream = resourceLoader.getResourceAsStream("/styles/foo.xsl");
if there is no class, just create a dummy class.
i think that should work because you will always get the classloader responsible for the jar.