我运行在一个环境中,在这个环境中我可以传递参数,但不能使用普通命令行设置环境变量。
尽管如此,我仍想设置环境变量。是否有另一种方法“欺骗”Java已经设置了环境变量,例如使用-D参数?
(我正在通过Hue在Oozie中运行Spark;所有这些都在Cloudera堆栈中。)
我运行在一个环境中,在这个环境中我可以传递参数,但不能使用普通命令行设置环境变量。
尽管如此,我仍想设置环境变量。是否有另一种方法“欺骗”Java已经设置了环境变量,例如使用-D参数?
(我正在通过Hue在Oozie中运行Spark;所有这些都在Cloudera堆栈中。)
java
命令本身似乎不允许这样。它有一个 -D
参数,但是它设置了 Java '系统属性':
$ java -help 2>&1 | grep -A1 '\-D'
-D<name>=<value>
set a system property
ProcessBuilder
上设置环境变量(请参见Arnon在他的评论中链接的问题:如何从Java设置环境变量?),然后使用实际的JAR从中调用java
。您可以将环境变量硬编码设置,也可以根据包装器接收到的系统属性进行设置。(或者您甚至可以使用Java实现自己的shell并将脚本传递给它。)
如果您可以修改该JAR实际源代码,则更符合习惯的解决方案是使其自身对属性做出反应,而不是(或者除了)环境变量。(当然,除非您必须控制Java命令/ JVM有反应的环境变量,而不是要运行的JAR。)
java -cp .... your.Prog FOO=BAR BAZ=BOOM command arguments ...
并使用扩展了 FOO
和 BAZ
的环境启动 command
(注意,command
可能是 java
...)
FOO=bar java ....
- Buddy