【问题标题】:Java ProcessBuilder not recognizing java_home pathJava ProcessBuilder 无法识别 java_home 路径
【发布时间】:2015-11-20 19:45:43
【问题描述】:

我正在尝试自动化一个流程,其中一个需要进行 ant 构建。我已经设置了所有的环境变量。直接在 cmd 中输入命令可以:

我的 build.xml 有一些如下属性:

<property name="java.home" value="${env.JAVA_HOME}"/>
<property name="java.compiler.path" value="${JAVA_HOME}\bin\javac"/>
<echo> ${java.home} </echo>
<echo> ${java.compiler.path} </echo>

在 cmd 上调用“ant”会回显 JDK 的目录。但是通过ProcessBuilder调用ant

 CommandUtils.execute("\"c:\\Program Files (x86)\\Ant\\bin\\ant\"");
 //inside execute() { pb = new ProcessBuilder("cmd", "/c", command);....}

将逐字回显 ${java.home} 和 ${java.compiler.path}。 是否可以进行任何更改以指向 java 路径,以便 ProcessBuilder 能够识别 java 路径?

【问题讨论】:

  • 哪里说ProcessBuilder 替代了环境变量?
  • 主要问题呢?当我做蚂蚁时,我认为这不是 build.xml 问题的原因。 ${JAVA_HOME} 回显正确的目录,但 ${env.JAVA_HOME} 回显 ${env.JAVA_HOME}。所以我根本无法通过 ProcessBuilder 运行 ant build?
  • 那是因为你的 java home 指向 JRE 而不是 JDK,所以在类路径中找不到编译器(在 tools.jar 中)
  • 我编辑了这个问题。 ProcessBuilder 指向一个完全不同的 lib 目录。从终端运行ant仍然指向jdk1.6.0_21的JRE,但它构建成功
  • 主要问题正是为什么您期待无证行为。这里没有其他问题需要解决。您提到的课程按记录工作。

标签: java ant processbuilder java-home


【解决方案1】:

用 % 替换环境变量将不起作用。请改用 System.getenv () 中的值。

对于 ant 错误:您的类路径中需要一个编译器。 Tools.jar 不包含在 JRE 中,仅在 JDK 中

【讨论】:

  • 主要问题呢?当我做蚂蚁时,我认为这不是 build.xml 问题的原因。 ${JAVA_HOME} 回显正确的目录,但 ${env.JAVA_HOME} 回显 ${env.JAVA_HOME}。所以我根本无法通过 ProcessBuilder 运行 ant build?
【解决方案2】:

使用ProcessBuilder设置JAVA_HOME环境变量并执行命令。

CommandUtils.execute:

ProcessBuilder pb = new ProcessBuilder();
// copy the java.home variable from the current Java process (or set your own)
pb.environment().put("JAVA_HOME", System.getProperty("java.home"));
pb.command("cmd", "/c", command);

Process process = pb.start();

【讨论】: