在Java中保存环境变量

在Java中保存环境变量,java,environment-variables,Java,Environment Variables,我看完了《stackoverflow》杂志上以前发表的一系列问题。因此,我的Java应用程序修改了系统环境,例如: Map<String, String> env = System.getenv(); ... ... map.put("SOME_VAR_ENV", "SOME_KEY_VAR");* 打印一些密钥变量 这是我的问题。在下一句话中,我的Java应用程序将控制权让给其他Java应用程序。我的Java应用程序。调用一个外部Java类,据我所知,它必须创建一个新的子进程来运

我看完了《stackoverflow》杂志上以前发表的一系列问题。因此,我的Java应用程序修改了系统环境,例如:

Map<String, String> env = System.getenv();
...
...
map.put("SOME_VAR_ENV", "SOME_KEY_VAR");*
打印
一些密钥变量

这是我的问题。在下一句话中,我的Java应用程序将控制权让给其他Java应用程序。我的Java应用程序。调用一个外部Java类,据我所知,它必须创建一个新的子进程来运行。但是,新流程没有保留新的环境变量(SOME_VAR_ENV)

我不知道发生了什么事。为什么第二个应用程序没有保留环境?欢迎任何想法或帮助:)

谢谢

使用API启动子进程,它允许您设置环境变量:

 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory(new File("myDir"));
 Process p = pb.start();
ProcessBuilder pb=newprocessbuilder(“myCommand”、“myArg1”、“myArg2”);
Map env=pb.environment();
环境看跌期权(“VAR1”、“myValue”);
环境移除(“其他变量”);
环境put(“VAR2”,环境get(“VAR1”)+“后缀”);
目录(新文件(“myDir”);
进程p=pb.start();

Java中没有跨平台的方法来设置调用上下文的环境变量。

先写然后读Java文件,

这里还有一个参考-您也可以使用Runtime.exec来完成,但api更糟糕:我不能使用ProcessBuilder/Runtime,因为我的Java代码为externalClass创建了一个新对象,它表示外部Java应用程序(我猜它创建了一个子进程,但这对我来说是一个黑盒子)。我无法控制externalClass的执行流。然后,我希望externalClass应用程序从我自己的Java应用程序中获得新的环境(我使用了与Sean提供的类似的代码)。@smc如我所说,如果没有硬编码特定于环境的命令,就无法做到这一点。这就是你需要一个shell专家,而不是Java专家(如果可能的话)的地方。你能把代码张贴在“在下一句话中,我的Java应用程序将控制权交给其他Java应用程序”的地方吗?它调用一个外部类:Session s=new Session();s、 运行(参数)。我无法控制会话类的流执行,但我希望s对象获得我修改过的环境。会话中有一个选项可以通过某种方式传递环境变量,或者您可以修改会话的代码,或者您被卡住了。没有选项可以将环境变量传递给会话,我不能修改这个类。所以,我被卡住了:(
 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory(new File("myDir"));
 Process p = pb.start();