在文件系统和jar中都有具有相同基本名称的资源包。尝试从文件系统加载资源包,而不是从jar加载。
URLClassLoader urlLoader = new URLClassLoader(new java.net.URL[]{filePathURL});
ResourceBundle bundle = ResourceBundle.getBundle( "my.bundle", locale, urlLoader );包是从jar加载的,而不是从文件系统加载的。为什么?如果我将包基名更改为my.foo.bundle(与jar中的包名不同),它就能工作。但是在文件系统和jar中,包名是相同的。有办法吗?
谢谢。
发布于 2015-03-17 19:36:37
我认为这是因为URLClassLoader加载资源的方式。
In case of URLClassLoader:
每当请求资源时,它首先要求父类加载器加载它。如果该资源不可用,则检查子类加载器。
不确定这是否是最好的方法,但是,可能的解决方案:
1.使用构造函数
`public URLClassLoader(URL[] urls, ClassLoader parent)`并为父母提供null
就像这样:
URLClassLoader urlLoader = new URLClassLoader(new java.net.URL[]{filePathURL}, null);
ResourceBundle bundle = ResourceBundle.getBundle( "my.bundle", locale, urlLoader );2.扩展URLClassLoader并覆盖方法getResource方法,以便首先从类加载器加载:
public URL getResource(String name) {
URL url = findResource(name); // this will load from your class loader
if (url == null) {
if (parent != null) {
url = parent.getResource(name);
} else {
url = getBootstrapResource(name);
}
}
return url;
}https://stackoverflow.com/questions/29106303
复制相似问题