我的目标是从 java 运行 SVN 命令以满足我的要求之一,同样我已经安装了 TortoiseSVN 命令行工具。将适当的路径“C:/Program Files”/TortoiseSVN/bin”添加到我的环境“Path”变量中。
通过上述设置,我可以使用“svn --version”从 Windows 命令行运行我的 svn 命令,它工作得非常好。
现在回到代码来执行相同的操作,我为此使用了 processbuilder。但是我最终遇到了上述错误-java.io.IOException:无法运行程序“svn --version”:CreateProcess error=2,系统找不到指定的文件。
我已经尝试过以下事情,
使用 ProcessBuilder.environment 检查 Path 和 PATH 值。路径是 emply,但 PATH 配置了所有必要的应用程序路径,包括“TortoiseSVN/bin”路径。这样就清除了 ProcessBuilder 在其路径中没有可执行位置的理论。
在执行时,我尝试给出完整路径,而不是仅仅 svn --version,即“C:/Program Files/TortoiseSVN/bin/svn.exe”。这也给出了同样的错误。
我为其他可执行文件(如“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();
}
}
}
期待任何提示/指针。
谢谢,维姬