是否可以在运行时为本机库添加新路径? (而不是使用属性java.library.path启动Java),因此在尝试查找nativeLibraryName
时,调用System.loadLibrary(nativeLibraryName)
将包含该路径。 这是可能的,或者这些路径在JVM启动后被冻结?在Java中运行时为本机库添加新路径
5
A
回答
19
这似乎是不可能没有一点的黑客(即访问ClassLoader类的私有字段)
这blog提供这样做的2种方式。
备案,这里是简短的版本。
选项1:用新的值完全取代的java.library.path)
public static void setLibraryPath(String path) throws Exception {
System.setProperty("java.library.path", path);
//set sys_paths to null so that java.library.path will be reevalueted next time it is needed
final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);
}
选项2:添加新的路径,以当前的java.library.path
/**
* Adds the specified path to the java library path
*
* @param pathToAdd the path to add
* @throws Exception
*/
public static void addLibraryPath(String pathToAdd) throws Exception{
final Field usrPathsField = ClassLoader.class.getDeclaredField("usr_paths");
usrPathsField.setAccessible(true);
//get array of paths
final String[] paths = (String[])usrPathsField.get(null);
//check if the path to add is already present
for(String path : paths) {
if(path.equals(pathToAdd)) {
return;
}
}
//add the new path
final String[] newPaths = Arrays.copyOf(paths, paths.length + 1);
newPaths[newPaths.length-1] = pathToAdd;
usrPathsField.set(null, newPaths);
}
相关问题
- 1. 为ImageIcon添加路径 - Java
- 2. 运行JTape库(Java库路径)
- 3. Eclipse Java运行时类路径和不同的库版本
- 4. 为什么我们要在eclipse中的java构建路径中添加服务器运行时库?
- 5. Eclim在启动Java程序时无视本机库路径
- 6. 在运行时指定java属性路径的路径
- 7. 设置本机库路径
- 8. 在作为战争运行时将目录添加到grails类路径中?
- 9. Matlab的添加本机库路径编程
- 10. 在Java中运行时添加骆驼路由
- 11. 在运行时在WPF RichTextBox的新行中添加文本
- 12. 运行时的Java类路径
- 13. 在运行时将dex添加到Android类路径
- 14. 在运行时通过路径加载共享库
- 15. 从命令行运行时将jar添加到类路径
- 16. 当在环境变量中添加路径字段时未设置java路径
- 17. PHP路径在本地主机上运行脚本翻倍
- 18. XAML路径 - 添加文本
- 19. Ant:在bash脚本中添加java类的路径
- 20. Android中的Java加密标准库以本机代码运行
- 21. 的Java:添加类路径中CustomClassLoader
- 22. 将Java添加到类路径中
- 23. 添加变量文件路径在Java
- 24. Tomcat web项目中的Java本机库路径
- 25. 将JSP添加到JSP的运行时路径
- 26. Maven systemPath未添加到运行时类路径
- 27. 添加新文件时,XCode项目中相对路径的错误行为
- 28. 在命令行别名中为vim设置运行时路径
- 29. 如何在java运行时exec方法中提供长路径?
- 30. 在eclipse中为java构建路径添加openCV
http://stackoverflow.com/questions/2899804/setting-classpath-during-runtime – 2013-03-14 12:35:30