如何通过编程设置Djava.library.path(或替代方法)?

8

我想通过编程的方式设置虚拟机参数 Djava.library.path。如果无法完成,有什么替代方案(如果有的话)?


2
可能是重复问题:https://dev59.com/9W035IYBdhLWcg3wMNCW - Fls'Zen
3个回答

11

使用这种方法解决问题非常容易:

public static void addLibraryPath(String pathToAdd) throws Exception {
    Field usrPathsField = ClassLoader.class.getDeclaredField("usr_paths");
    usrPathsField.setAccessible(true);

    String[] paths = (String[]) usrPathsField.get(null);

    for (String path : paths)
        if (path.equals(pathToAdd))
            return;

    String[] newPaths = Arrays.copyOf(paths, paths.length + 1);
    newPaths[newPaths.length - 1] = pathToAdd;
    usrPathsField.set(null, newPaths);
}

2
这是一个不错的技巧,如果某个第三方库使用 System.loadLibrary(...),而你无法自行更改它!感谢! - Stefan
JDK8很好,但你已经找到如何将其移植到JDK17了吗? - Daniel

4

2
看起来你对那个系统属性是正确的,因为它只在启动时读取一次。http://fahdshariff.blogspot.jp/2011/08/changing-java-library-path-at-runtime.html - Connr

3

java.library.path是在使用System.loadLibrary(String libname)加载动态库时使用的。而System.load(String filename)则使用完整的文件名,不需要使用java.library.path


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接