我的目标是在Java中运行SVN命令以满足我的要求,为此我已经安装了TortoiseSVN命令行工具,并将适当的路径“C:/ Program Files” / TortoiseSVN / bin“添加到我的环境”Path“变量中。
通过上述设置,我可以使用“svn --version”从Windows命令行运行我的svn命令,并且它完美地工作。
现在回到执行相同代码的问题,我正在使用processbuilder。但是我遇到了上述错误-java.io.IOException:无法运行程序“svn --version”:CreateProcess error = 2,系统找不到指定的文件。
我已经尝试过以下事情:
1. 使用ProcessBuilder.environment检查了Path和PATH值。 Path为空,但PATH已配置所有必要的应用程序路径,包括“TortoiseSVN / bin”路径。因此,这清除了ProcessBuilder没有可执行位置的路径理论。
2. 在执行时,我尝试给出完整的路径,即“C:/ Program Files / TortoiseSVN / bin / svn.exe”。那也给出了相同的错误。
3. 我尝试了与“java -version”等其他可执行文件相同的代码,但也失败了,并出现了相同的异常。
我现在有一种感觉,似乎有些基本的东西不对。但是我已经花了一天以上的时间来思考这个问题,但我没有得到任何线索。
好吧,再说一件事,我在Windows 7框中运行它。
以下是我正在使用的代码:
通过上述设置,我可以使用“svn --version”从Windows命令行运行我的svn命令,并且它完美地工作。
现在回到执行相同代码的问题,我正在使用processbuilder。但是我遇到了上述错误-java.io.IOException:无法运行程序“svn --version”:CreateProcess error = 2,系统找不到指定的文件。
我已经尝试过以下事情:
1. 使用ProcessBuilder.environment检查了Path和PATH值。 Path为空,但PATH已配置所有必要的应用程序路径,包括“TortoiseSVN / bin”路径。因此,这清除了ProcessBuilder没有可执行位置的路径理论。
2. 在执行时,我尝试给出完整的路径,即“C:/ Program Files / TortoiseSVN / bin / svn.exe”。那也给出了相同的错误。
3. 我尝试了与“java -version”等其他可执行文件相同的代码,但也失败了,并出现了相同的异常。
我现在有一种感觉,似乎有些基本的东西不对。但是我已经花了一天以上的时间来思考这个问题,但我没有得到任何线索。
好吧,再说一件事,我在Windows 7框中运行它。
以下是我正在使用的代码:
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();
}
}
}
期待任何提示/指引。
谢谢, Vicky