My goal is to run SVN commands from java for one of my requirements, for the same i have already installed TortoiseSVN command line tool. Added the appropriate path"C:/Program Files"/TortoiseSVN/bin" to my environment "Path" variable.
With the above setup, i can run my svn commands from windows command line using say "svn --version" and it works perfectly fine.
Now coming back to the code to execute the same, i am using processbuilder for this. However i end up with the above error - java.io.IOException: Cannot run program "svn --version": CreateProcess error=2, The system cannot find the file specified.
I tried following things already,
Using ProcessBuilder.environment checked the Path and PATH values. Path is emply, but PATH has all the necessary application paths configured including "TortoiseSVN/bin" path. So that clears the theory of ProcessBuilder not have executable location in its path.
While executing, instead of just svn --version i tried giving the complete path i.e. "C:/Program Files/TortoiseSVN/bin/svn.exe". That too gave the same error.
I tried the same code for other executable like "java -version" that too failed with the same exception.
I now have a feeling something very basic is not right. But tried hitting my head around this for more than a day now, but i ain't getting any clues.
Ok one more thing, i am running this on Windows 7 box.
Below is the code that i am using,
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(); } } } Looking forward to any hints/pointers at all.
Thanks, Vicky