是否可以 "fool" java 从命令行设置环境变量
Is it possible to "fool" java that an environment variable is set from the command line
我 运行 在一个可以传递参数但不能使用普通命令行设置环境变量的环境中。
不过我还是想设置环境变量。是否有 "fool" java 的替代方法来设置环境变量,例如使用 -D 参数?
(我 运行 通过 hue 在 oozie 中产生火花;全部在 Cloudera 堆栈中)。
java
命令本身似乎不允许这样做。它有一个 -D
参数,但设置 Java 'system properties':
$ java -help 2>&1 | grep -A1 '\-D'
-D<name>=<value>
set a system property
Java 系统属性是一种 Java 属性。与环境变量 java properties are key-value pairs 类似,但与环境变量不同:如果您的 Java 应用程序对特定环境变量做出反应,则设置同名系统 属性 不会除非应用程序也明确对此作出反应,否则不会有任何影响 属性。
如果您的环境允许您 运行 任意 Java 应用程序并且如果它允许您的 Java 应用程序执行其他进程,您可以编写一个设置环境变量的小包装器在 ProcessBuilder
(see the question Arnon linked in : How do I set environment variables from Java?) 上,然后使用您的实际 JAR 从中调用 java
。您可以对要设置的环境变量进行硬编码,也可以根据包装器接收到的系统属性来设置它们。 (或者您甚至可以在 Java 中实现自己的 shell 并将脚本传递给它。)
不过,如果您可以修改该实际 JAR 的源代码,那么 更为惯用的解决方案 将使其本身对属性而不是(或另外对)环境做出反应变量。 (除非您必须控制 java 命令/JVM 响应的环境变量,而不是您想要 运行 响应的 JAR。当然,这种方法将不适用。)
如果您可以 运行 任意 Java 代码,则可以使用 ProcessBuilder 创建并 运行 一个流程,包括您选择的环境。
因此,编写一个 java 程序来解析像
这样的命令行
java -cp .... your.Prog FOO=BAR BAZ=BOOM command arguments ...
并开始 command
,环境由 FOO
和 BAZ
扩展
(注意 command
可能是 java
...)
我 运行 在一个可以传递参数但不能使用普通命令行设置环境变量的环境中。
不过我还是想设置环境变量。是否有 "fool" java 的替代方法来设置环境变量,例如使用 -D 参数?
(我 运行 通过 hue 在 oozie 中产生火花;全部在 Cloudera 堆栈中)。
java
命令本身似乎不允许这样做。它有一个 -D
参数,但设置 Java 'system properties':
$ java -help 2>&1 | grep -A1 '\-D'
-D<name>=<value>
set a system property
Java 系统属性是一种 Java 属性。与环境变量 java properties are key-value pairs 类似,但与环境变量不同:如果您的 Java 应用程序对特定环境变量做出反应,则设置同名系统 属性 不会除非应用程序也明确对此作出反应,否则不会有任何影响 属性。
如果您的环境允许您 运行 任意 Java 应用程序并且如果它允许您的 Java 应用程序执行其他进程,您可以编写一个设置环境变量的小包装器在 ProcessBuilder
(see the question Arnon linked in java
。您可以对要设置的环境变量进行硬编码,也可以根据包装器接收到的系统属性来设置它们。 (或者您甚至可以在 Java 中实现自己的 shell 并将脚本传递给它。)
不过,如果您可以修改该实际 JAR 的源代码,那么 更为惯用的解决方案 将使其本身对属性而不是(或另外对)环境做出反应变量。 (除非您必须控制 java 命令/JVM 响应的环境变量,而不是您想要 运行 响应的 JAR。当然,这种方法将不适用。)
如果您可以 运行 任意 Java 代码,则可以使用 ProcessBuilder 创建并 运行 一个流程,包括您选择的环境。
因此,编写一个 java 程序来解析像
这样的命令行java -cp .... your.Prog FOO=BAR BAZ=BOOM command arguments ...
并开始 command
,环境由 FOO
和 BAZ
扩展
(注意 command
可能是 java
...)