【问题标题】:How to set Java home in JSch to execute a command?如何在 JSch 中设置 Java 主页以执行命令?
【发布时间】:2019-09-16 19:41:09
【问题描述】:

我正在使用 Jcraft JSch 连接到远程机器并执行命令。由于它是一个非交互式 shell,它没有找到 Java 主页。使用 jsch 时如何设置 Java 主页?看起来像

((ChannelExec) channel).setEnv("LANG", "UTF-8");
((ChannelExec) channel).setEnv("JAVA_HOME", "/blah/java/J8.0_64/");

已弃用?

public String sendCommand(String command) {
  StringBuilder outputBuffer = new StringBuilder();

  try {
     Channel channel = sesConnection.openChannel("exec");
     ((ChannelExec) channel).setEnv("LANG", "UTF-8");
     ((ChannelExec) channel).setEnv("JAVA_HOME", "/blah/java/J8.0_64/");
     ((ChannelExec) channel).setCommand(command);
     InputStream commandOutput = channel.getInputStream();
     channel.connect();
     int readByte = commandOutput.read();

     while (readByte != 0xffffffff) {
        outputBuffer.append((char) readByte);
        readByte = commandOutput.read();
     }

     channel.disconnect();
  } catch (IOException ioX) {
     logWarning(ioX.getMessage());
     return null;
  } catch (JSchException jschX) {
     logWarning(jschX.getMessage());
     return null;
  }

  return outputBuffer.toString();
}

执行命令时遇到错误

JAVA_HOME 未设置,找不到 javac 推断位置,请设置 JAVA_HOME。

【问题讨论】:

  • ((ChannelExec) channel).setCommand(command); 您能否在edit 的问题中包含您尝试在此处运行的实际命令的示例?
  • @Kenster ((ChannelExec) channel).setCommand(command) 是我正在使用的测试方法的一部分。实际测试中包含命令并尝试运行构建。问题不在于命令,但看起来它需要 java home 来运行此命令。

标签: java ssh environment-variables jsch


【解决方案1】:

ChannelExec.setEnv 在 JSch 方面可能有效。但假设您要连接到 OpenSSH 服务器,则必须明确配置服务器以允许您使用 AcceptEnv directive 设置 LANGJAVA_HOME 环境变量。它可能不是。

您可以使用 PuTTY (Connection > Data > Environment variables) 尝试相同的操作。您可能会收到 “服务器拒绝设置环境变量” 消息。

另见How can I set environment variables when I ssh login to my Unix box by passing custom arguments?


无论如何,正确的解决方案是修复您的服务器配置以正确设置环境,即使对于非交互式会话也是如此。

或者作为一种肮脏的解决方法,您可以直接在命令中设置变量:

JAVA_HOME=/blah/java/J8.0_64/; java ...

另见Certain Unix commands fail with "... not found", when executed through Java using JSch

【讨论】:

  • 谢谢马丁。将尝试修复服务器配置以正确设置非交互式会话的环境。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 2019-12-20
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多