我必须依赖第三方库,它期望某些东西在类路径中。好像用
ResourceBundle.getBundle("cmbcmenv");
获取属性文件。此文件的位置由安装连接器时设置的环境变量指定(它创建一个变量“IBMCMROOT”,指向包含该文件的目录)。我不能在我的类路径中使用相对路径或绝对路径,因为连接器的安装目录可能会有所不同。
我试过像这样手动添加一个新的 ClassLoader:
ClassLoader defaultLoader = Thread.currentThread().getContextClassLoader();
String config = System.getenv().get("IBMCMROOT")+"/cmgmt";
URLClassLoader loader = URLClassLoader.newInstance(new URL[]{new File(config).toURI().toURL()},defaultLoader);
Thread.currentThread().setContextClassLoader(loader);
这在 getBundle 上也失败了。由于它是第三方库,我无法使用
ResourceBundle.getBundle("cmbcmenv",Locale.getDefault(),loader);
不然不会有这个问题。。
如何强制 ResourceBundle 使用特定的 ClassLoader?似乎 getBundle 使用 CallerClassloader 或 SystemClassloader 但没有办法影响它,对吧?