在我的linux盒子上,这是我要做的:
$ cat GetSystemProperty.java import java.util.Properties; import java.util.Enumeration; public class GetSystemProperty { public static void main(String args[]) { if( args.length == 0 ) { Properties p = System.getProperties(); Enumeration keys = p.keys(); while (keys.hasMoreElements()) { String key = (String)keys.nextElement(); String value = (String)p.get(key); System.out.println(key + " : " + value); } } else { for (String key: args) { System.out.println(System.getProperty( key )); } } } } $ javac GetSystemProperty.java $ java GetSystemProperty java.library.path /usr/lib/jvm/java-6-openjdk/jre/lib/amd64/server:/usr/lib/jvm/java-6-openjdk/jre/lib/amd64:/usr/lib/jvm/java-6-openjdk/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib/jni:/lib:/usr/lib
这不是一个完全不合理的问题,但没有好的答案,所以对后人来说,我会尝试解释 为什么 你被卡住了,为什么它不起作用。
java.library.path 不保证根据环境变量设置。您可以指定您想要的内容 -Djava.library.path= 。更有可能的是,这就是你 真 无论如何都想做。这就是选项存在的原因。
java.library.path
-Djava.library.path=
事实证明(至少在Windows上),您正在寻找的环境变量不仅仅是不受干扰的。试试这个代码。
package com.stackoverflow; import java.util.Map; public class LibPathFinder { public static void main(String[] args) { String javaLibPath = System.getProperty("java.library.path"); Map<String, String> envVars = System.getenv(); System.out.println(envVars.get("Path")); System.out.println(javaLibPath); for (String var : envVars.keySet()) { System.err.println("examining " + var); if (envVars.get(var).equals(javaLibPath)) { System.out.println(var); } } } }
你会注意到它运行时,它打印的前两个东西是不同的。如果Java正在使用Windows PATH 变量,它首先摆弄价值。我放弃了调查正在发生的事情。关键是,没有一个与之完全匹配的环境变量 java.library.path 。我没有试过Linux或OSX,你的里程可能会有所不同
PATH
像这样混淆某人的环境变量真的不太好。它们用于整个shell,因此您要让用户在其环境中使用共享库,但仅限于此 有时 。改变的唯一真正原因 java.library.path 是添加本机库。如果您正在使用本机库,那么您已经拥有特定于操作系统的代码(必须为平台编译,对吧?),所以您已经放弃了“没有特定于平台的边缘情况”的斗争。最好的办法是将您的本机库放在系统路径(可能是什么)已经找到它的位置,或者将库的路径添加到它 永久性 与某种安装程序。如果您不想做其中任何一项,那么我建议使用@ malat代码的变体,打印真实 java.library.path ,然后将您的路径追加到脚本中的结果,然后使用 -D 为实际程序运行设置它的选项。
-D