以编程方式设置Java.library.path

时间:2011-08-02 09:01:13

标签: java java-native-interface

我可以从java代码本身以编程方式设置java.library.path吗?

以下不起作用。

    System.setProperty("java.library.path", "/blah");

5 个答案:

答案 0 :(得分:19)

不,你不能。此属性是只读值。您可以使用以下命令在JVM启动时更改它:

-Djava.library.path=your_path

如果要从特定位置加载库,可以使用System.load(libraryPath)代替库的完整路径。

答案 1 :(得分:19)

答案 2 :(得分:0)

我只是引用secmask(https://cedarsoft.com/blog.html)提供的链接,以防链接失效:

  

以后无需更改系统属性java.library.path   任何影响,因为该属性的评估很早就被缓存了。但   jdic的家伙们发现了一种解决它的方法。它是一个   有点脏-但是,嘿,这些骇客是我们所有人都喜欢的原因   Java。

System.setProperty("java.library.path", "/path/to/libs");
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
  

说明:

     

首先,用新值更新系统属性。这可能是相对路径,或者您可能想动态创建该路径。 Classloader具有包含路径的静态字段(sys_paths)。如果将该字段设置为null,则会自动初始化。因此,一旦调用null,将其强制设为loadLibrary()将导致重新评估库路径。

答案 3 :(得分:-1)

是的,它会读取环境变量。 以下是使用ini4j设置Environment变量的代码。

import java.io.IOException;
import org.ini4j.Reg;


public class SettingWinEnvironmentUsing_ini4j {

    public static void main(String args[])
    {
        System.out.println("Setting System Environment Variables");

        Reg reg = new Reg();
        Reg.Key env = reg.add("HKEY_CURRENT_USER\\Environment");
        env.put("RR_PROPERTY_PATH", "c:\\path");
        try {
            reg.write();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(env.get("RR_PROPERTY_PATH"));
    }
}

你可以在

找到ini4j jar

http://cropforge.org/plugins/scmsvn/viewcvs.php/IAPlugin/lib/ini4j-0.5.2-SNAPSHOT.jar?rev=656&root=icisjavatools&view=log

答案 4 :(得分:-3)

import java.util.Map;

public class ReadingEnvironment {

    public static void main(String[] args) {
        System.out.println("Reading System Environment Variables:\n");
        // System.out.println(System.getenv());
        Map<String, String> env = System.getenv();
        for (String envName : env.keySet()) {
            System.out.format("%s=%s%n", envName, env.get(envName));
        }
    }
}