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

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

以下不起作用。

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

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

 -Djava.library.path=your_path 

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

也许这有帮助http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/

[编辑]链接已经死了,所以我在这里引用它

当搞乱JNI时,必须相应地设置java.library.path 。 不幸的是,唯一的方法是在应用程序启动之前添加系统属性:

java -Djava.library.path=/path/to/libs

与…一样

java -Djava.library.path=C:\Java\ljwgl\libs org.mypackage.MyProgram更改系统属性没有任何效果,因为很早就会对属性进行评估并进行缓存。 但是那些在jdic的人发现了一种如何解决它的方法。 它有点脏 – 但是嘿,那些黑客是我们都喜欢Java的原因……

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

说明

首先使用新值更新系统属性。 这可能是一个相对路径 – 或者您可能想要动态创建该路径。

类加载器具有包含路径的静态字段(sys_paths)。 如果该字段设置为null,则会自动初始化该字段。 因此,只要调用loadLibrary(),强制该字段为null将导致重新评估库路径…

是的,它将读取环境变量。 以下是使用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

 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 env = System.getenv(); for (String envName : env.keySet()) { System.out.format("%s=%s%n", envName, env.get(envName)); } } }