2011-08-02 23 views
12

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

以下不起作用。

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

如果它不工作的ini4j罐子,你为什么要问? –

+3

我的意思是我给的代码片段不起作用。 – Fakrudeen

回答

15

不,你不能。该属性是只读值。您可以在JVM launchin时间更改:

-Djava.library.path=your_path 

如果你想从一个特定的位置加载一个库,你可以使用System.load(libraryPath)用,而不是完整的路径到库中。

+0

我想接受这两个答案,但是因为我只能接受一个答案,所以我会继续这样做,因为很酷的入侵依赖于实现细节。 – Fakrudeen

16

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

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

http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/

当使用JNI乱搞复制,一个必须设置“java.library.path” 。不幸的是,唯一的办法就是增加一个系统属性 之前启动应用程序:

的java -Djava.library.path = /路径/要/库

一样

的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),其中包含 路径。如果该字段设置为空,则会自动初始化。 因此迫使该字段为空将尽快调用LoadLibrary导致进库路径的再评价 ()被调用......

+0

+1 - 非常酷的破解 - 我会尝试这是最后的手段[这是非常酷的,但可维护性!]。 – Fakrudeen

+0

请在你的回答中引用文章的相关部分,因为链接可能会死亡(你的)。 –

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

这是否回答这个问题呢?它打印出一个变量列表,它没有设置任何变量。 – berry120

-1

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

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

你可以找到

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