私たちは、OSBバージョンのアプリケーションでProcessBuilderに奇妙な問題を抱えています。これは、universalJavaApplicationStubに切り替えたときに開始されました。以前はAppBundlerTaskを使用していました。 注:この結果を見るために、完全なMACのアプリバンドルを構築する必要があるとして、サンプルクラスを行うことはできません。OSXアプリケーションバンドルから実行した場合、ProcessBuilderがファイルを見つけることができません
log.debug("render: {}", Arrays.toString(myCommandLine.toArray()));
log.debug("render: dir={}", m_workingDir);
final ProcessBuilder processBuilder = new ProcessBuilder(myCommandLine);
processBuilder.directory(new File(m_workingDir));
final Process process = processBuilder.start();
とログ出力が見えた:
プロセスを開始するための当社のコードです
render: [/Applications/EFI/Metrix/bin/cli/rasters, --saveasimg, --pagebox=MEDIABOX, --smoothing=All]
render: dir=/Applications/EFI/Metrix/bin/cli/
これは、インストールされたディレクトリから実行されていなかったことを示すラスタアプリがエラーをログに記録するという結果に終わりました。 (2番目のログ行のディレクトリです)
作業ディレクトリは、processBuilder.directory()呼び出しで指定したものではないようです。
誰でも何が起こっているのか説明できますか?
あなたは現在の作業ディレクトリが設定されていることに頼ることはできません(これはかなり一般的です)。あなたのクラスがどこからロードされたのかをJVMに尋ね、そこからインストールディレクトリを派生させることができます。あるいは単に 'myCommandLine [0]'を使うことができますか? –
"pwd"を実行したシェルスクリプトを呼び出すようにコードを修正しました。 作業ディレクトリが正しいです。 – CasaDelGato
'new File(m_workingDir).getAbsolutePath()'の値を出力してみてください。 –