how to set LD_LIBRARY_PATH within the Java program?
Hi:
I need to set linux environment variable LD_LIBRARY_PATH within my Java program. The reason is that the Java program calls some linux program which dynamically links to other *.so files. I could do this on the terminal first:
export LD_LIBRARY_PATH=/fs/great/lib:${LD_LIBRARY_PATH}
For some reason, I don't want to do it this way. I want to do it within the Java program. I googled and saw this hacking way,
http://stackoverflow.com/questions/318239/how-do-i-set-environment-variables-from-java
People say it works great. But I don't understand his code, posted below. How to use it in my case. Thank you.
protected static void setEnv(Map<String, String> newenv)
{
try
{
Class<?> processEnvironmentClass = Class.forName("java.lang.ProcessEnvironment");
Field theEnvironmentField = processEnvironmentClass.getDeclaredField("theEnvironment");
theEnvironmentField.setAccessible(true);
Map<String, String> env = (Map<String, String>) theEnvironmentField.get(null);
env.putAll(newenv);
Field theCaseInsensitiveEnvironmentField = processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment");
theCaseInsensitiveEnvironmentField.setAccessible(true);
Map<String, String> cienv = (Map<String, String>) theCaseInsensitiveEnvironmentField.get(null);
cienv.putAll(newenv);
}
catch (NoSuchFieldException e)
{
try {
Class[] classes = Collections.class.getDeclaredClasses();
Map<String, String> env = System.getenv();
for(Class cl : classes) {
if("java.util.Collections$UnmodifiableMap".equals(cl.getName())) {
Field field = cl.getDeclaredField("m");
field.setAccessible(true);
Object obj = field.get(env);
Map<String, String> map = (Map<String, String>) obj;
map.clear();
map.putAll(newenv);
}
}
} catch (Exception e2) {
e2.printStackTrace();
}
} catch (Exception e1) {
e1.printStackTrace();
}
}