我正在尝试将属性文件动态添加到类路径中,如下所示
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());
}
但是我在类路径中看不到这个文件。当我使用
检查它System.getProperty("java.class.path")
我无法在此列表中看到我的文件。我在这里错过了什么吗?
答案 0 :(得分:4)
您无法添加属性文件的URL,您必须添加属性文件所在的目录的 URL。如:method.invoke(sysLoader, fileToAdd.getParent().toURL());
然后你可以使用ClassLoader.getResourceAsStream("my.properties");
,ClassLoader将在新添加的目录中搜索文件。
“此类加载器用于从引用 JAR文件和目录的URL的搜索路径加载类和资源。任何以”/“结尾的URL都假定为引用目录。否则,URL 假定引用JAR文件,将根据需要打开。“
答案 1 :(得分:1)
也许尝试这段代码,但是改变java.library.path或者保持它的方式,如果你可以使用库路径。
/**
* Allows you to add a path to the library path during runtime
* @param dllLocation The path you would like to add
* @return True if the operation completed successfully, false otherwise
*/
public boolean addDllLocationToPath(final String dllLocation)
{
//our return value
boolean retVal = false;
try
{
System.setProperty("java.library.path", System.getProperty("java.library.path") + ";" + dllLocation);
//get the sys path field
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
retVal = true;
}
catch (Exception e)
{
System.err.println("Could not modify path");
}
return retVal;
}