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
か? 環境マップを正しく使用していますか?