私の目標は、私の要件の1つとしてJavaからSVNコマンドを実行することです。同じように、TortoiseSVNコマンドラインツールをすでにインストールしています。適切なパス「C:/ProgramFiles」/TortoiseSVN/bin」を環境の「Path」変数に追加しました。
上記の設定で、「svn --version」などを使用して、Windowsコマンドラインからsvnコマンドを実行できます。これは完全に正常に機能します。
同じことを実行するためにコードに戻ってきました。これにはprocessbuilderを使用しています。ただし、上記のエラーが発生します--java.io.IOException:プログラム "svn --version"を実行できません:CreateProcess error = 2、システムは指定されたファイルを見つけることができません。
私はすでに物事をフォローしようとしました、
ProcessBuilder.environmentを使用して、PathとPATHの値を確認しました。パスは空ですが、PATHには「TortoiseSVN/bin」パスを含む必要なすべてのアプリケーションパスが構成されています。これにより、ProcessBuilderのパスに実行可能ファイルの場所がないという理論が明確になります。
実行中に、svn --versionだけでなく、完全なパス、つまり「C:/ProgramFiles/TortoiseSVN/bin/svn.exe」を指定しようとしました。それも同じエラーを出しました。
同じ例外で失敗した「java-version」のような他の実行可能ファイルに対して同じコードを試しました。
私は今、非常に基本的な何かが正しくないと感じています。でも、これを1日以上頭にぶつけてみましたが、何の手がかりも得られません。
もう1つ、Windows7ボックスでこれを実行しています。
以下は私が使用しているコードです、
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class RunningExecutable {
public static void main(String[] args){
String command = "svn --version";
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
ProcessBuilder svnProcessBuilder = new ProcessBuilder(command);
String PATH = svnProcessBuilder.environment().get("PATH");
System.out.println("PATH - " + PATH);
String path = svnProcessBuilder.environment().get("Path");
System.out.println("Path - " + path);
Process procObject = svnProcessBuilder.start();
BufferedReader cmdStreamReader = new BufferedReader(new InputStreamReader(procObject.getInputStream()));
String cmdOutput;
while ((cmdOutput = cmdStreamReader.readLine()) != null) {
outputStream.write((cmdOutput + "\n").getBytes());
}
System.out.println("O/p - " + outputStream.toString());
} catch (IOException e) {
e.printStackTrace();
} catch (Throwable th) {
th.printStackTrace();
}
}
}
ヒント/ポインタを楽しみにしています。
ありがとう、ヴィッキー