【问题标题】:Setting Djava.library.path programmatically (or alternatives)?以编程方式(或替代方法)设置 Djava.library.path?
【发布时间】:2013-04-12 01:10:33
【问题描述】:

我希望以编程方式设置 VM 参数 Djava.library.path。如果无法做到这一点,有什么替代方案(如果有的话)?

【问题讨论】:

标签: java jvm


【解决方案1】:

这个方法很容易解决:

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);
}

【讨论】:

  • 这是一个不错的 hack,如果某些 3rd-party 库使用 System.loadLibrary(...),您无法自行更改!泰!
【解决方案2】:

看看这个 java doc http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#setProperty(java.lang.String, java.lang.String)

你想调用 setProperty(String, String) 方法。

所以在你的情况下看起来像这样

System.setProperty("java.library.path","value_you_want");

【讨论】:

【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多