从 JAR 加载资源而不访问 ClassLoader?

Posted

技术标签:

【中文标题】从 JAR 加载资源而不访问 ClassLoader?【英文标题】:Load resource from JAR without accessing ClassLoader? 【发布时间】:2010-12-25 04:50:58 【问题描述】:

有没有一种简单的方法可以在不访问 ClassLoader 的情况下从我自己执行的 JAR 作为 InputStream 加载资源?问题是我的 java.policy 限制访问 ClassLoader(这不能更改)。我想加载一些 xml 配置,我可以将其放在我的 JAR 中的任何位置,但不能将它放在 JAR 之外。

感谢您的回答。 其实我的问题不在于我自己的 ClassLoader。我正在使用 XStream,它想要创建一些类加载器和应用程序崩溃:

java.security.AccessControlException:访问被拒绝(java.lang.RuntimePermission createClassLoader) 在 java.security.AccessControlContext.checkPermission(AccessControlContext.java:323) 在 java.security.AccessController.checkPermission(AccessController.java:546) 在 java.lang.SecurityManager.checkPermission(SecurityManager.java:532) 在 java.lang.SecurityManager.checkCreateClassLoader(SecurityManager.java:594) 在 java.lang.ClassLoader.(ClassLoader.java:226) 在 com.thoughtworks.xstream.core.util.CompositeClassLoader.(CompositeClassLoader.java:50)

【问题讨论】:

【参考方案1】:

Class.getResource/getResourceAsStream.

事实上,无论安全策略如何,一个类应该始终能够获得自己的类加载器。

【讨论】:

以上是关于从 JAR 加载资源而不访问 ClassLoader?的主要内容,如果未能解决你的问题,请参考以下文章

Applet加载来自不同域的jar;从坛子加载资源(例如图像)有问题

从 Eclipse 调试 SplashScreen 而不生成 Jar

如何在模块化的 java 11 应用程序中动态加载 Libreoffice jar,而不从自定义类加载器中获取 ClassCastException

怎么从外部读取jar包中的资源文件

SpringBoot:加载和读取jar包外面的资源文件

Java 程序正在从 system32 文件夹加载,而不是从它所在的文件夹加载