iha*_*obs 2 java classpath java-ee
我正在尝试将属性文件动态添加到类路径,如下所示
try {
File fileToAdd = new File(FILE_PATH);
URL u = fileToAdd.toURL();
ClassLoader sysLoader = ClassLoader.getSystemClassLoader();
if (sysLoader instanceof URLClassLoader) {
sysLoader = (URLClassLoader) sysLoader;
Class<URLClassLoader> sysLoaderClass = URLClassLoader.class;
// use reflection to invoke the private addURL method
Method method = sysLoaderClass.getDeclaredMethod("addURL",
new Class[] { URL.class });
method.setAccessible(true);
method.invoke(sysLoader, new Object[] { u });
}
} catch (Exception e) {
logger.error(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
但是我在类路径中看不到该文件。当我使用检查
System.getProperty("java.class.path")
Run Code Online (Sandbox Code Playgroud)
我在此列表中看不到我的文件。我在这里想念什么吗?
您不能添加属性文件的URL,而必须添加属性文件所在目录的URL。如:中所示:method.invoke(sysLoader, fileToAdd.getParent().toURL());
然后您可以使用ClassLoader.getResourceAsStream("my.properties");并且ClassLoader将在新添加的目录中搜索该文件。
“该类加载器用于从同时引用JAR文件和目录的URL的搜索路径中加载类和资源。任何以'/'结尾的URL 均被认为是目录。否则,该URL被认为是对目录的引用。到将根据需要打开的JAR文件。”