0

Apache commons exec を使用して Java アプリケーション内からスクリプトを起動しようとすると、次のエラーが発生します。

Error: Could not find or load main class "-DappEnv=te
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:402)
    at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:164)
    at TestRunner.runTest(TestRunner.java:37)
    at TestMain.main(TestMain.java:6)

次のコードの場合:

String jOpts = "JAVA_OPTS=\"-DappEnv=te -DsetInstance=true -Dinstance=.01\"";
String command = "/path/to/bin/script.sh -s argVal";
try {
  Map<String, String> procEnv = EnvironmentUtils.getProcEnvironment();
  EnvironmentUtils.addVariableToEnvironment(procEnv, jOpts);
  CommandLine cmdLine = CommandLine.parse(command);
  DefaultExecutor executor = new DefaultExecutor();
  executor.setWorkingDirectory(new File("/path/to"));
  executor.execute(cmdLine, procEnv);
} catch (Exception e) {
  e.printStackTrace();
}

環境変数を使用してコマンドを実行する代わりに、環境変数の引用符で囲まれた値を分割し、その名前でクラスを探しているように見えるため、エラーがループを引き起こしています。価値があるのは、以下が bash で正常に実行されることです。

JAVA_OPTS="-DappEnv=te -DsetInstance=true -Dinstance=.01" /path/to/bin/script.sh -s argVal

その引用された値が空白で分割されている理由、および/または の値でメインクラスを探している理由について、誰かが洞察を提供できますJAVA_OPTSか? 環境マップを正しく使用していますか?

4

1 に答える 1

0

問題の一部は、 exec が独自の引用符を の値に追加することでしJAVA_OPTSた。値を引用符で囲まないと、環境変数が適切に設定されます。

String jOpts = "JAVA_OPTS=-DappEnv=te -DsetInstance=true -Dinstance=.01";

コマンドの形式も間違っています。に渡される引数は、実行するプログラムの名前であるcommandLine.parse()必要があります。

String command = "/path/to/bin/script.sh";
CommandLine cmdLine = CommandLine.parse(command);

残りの引数は、次のように追加する必要がありますaddArgument()

cmdLine.addArgument("-s");
cmdLine.addArgument("argVal");
于 2014-06-18T20:29:14.240 に答える