我可以从java代码本身以编程方式设置java.library.path吗?
以下不起作用。
System.setProperty("java.library.path", "/blah");
答案 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答案 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));
}
}
}