Java svnkit:如何获得';svn状态';以编程方式作为字符串?

Java svnkit:如何获得';svn状态';以编程方式作为字符串?,java,svn,svnkit,Java,Svn,Svnkit,我只找到了需要实现复杂逻辑才能在存储库的根目录上获得svn status的确切输出的方法 由于svnkit还提供了一个命令行工具jsvn,该工具在svnkit cli中实现,我在org.tmatesoft.svn.cli.svn.SVNStatusCommand.run()中找到了要使用的代码 但我无法让它工作,也找不到jsvn工作的确切方式。我会调试jsvn,但无法设置gradle构建,很可能是因为我们这里的windows ntlm http代理 到目前为止,我所尝试的: StringBuff

我只找到了需要实现复杂逻辑才能在存储库的根目录上获得
svn status
的确切输出的方法

由于svnkit还提供了一个命令行工具
jsvn
,该工具在
svnkit cli
中实现,我在
org.tmatesoft.svn.cli.svn.SVNStatusCommand.run()中找到了要使用的代码

但我无法让它工作,也找不到jsvn工作的确切方式。我会调试jsvn,但无法设置gradle构建,很可能是因为我们这里的windows ntlm http代理

到目前为止,我所尝试的:

StringBuffer result = new StringBuffer();
SVNStatusCommand svnStatusCall = new SVNStatusCommand();
File statusResult = new File(System.getProperty("java.io.tmpdir") + File.separator + System.currentTimeMillis() + "svnStatusCalls");
PrintStream stream = new PrintStream(statusResult);
SVNCommandEnvironment env = new SVNCommandEnvironment("mySvn", stream, stream, null);
env.getTargets().add("/home/user/svnroot");
svnStatusCall.init(env);
svnStatusCall.run();
stream.flush();
Scanner scanner = new Scanner(statusResult);
while (scanner.hasNextLine()) {
    result.append(scanner.nextLine());
}
scanner.close();

由于SVNCommandendEnvironment的myTargets尚未初始化,即为null,因此此操作失败。目的是获取字符串形式的输出。我不喜欢文件系统中的PrintStream和额外文件,但看不到不同的方式。

效果很好。非常感谢你!使用System.in是否会成为一个问题?如果我不确定命令是否真的会尝试获取输入,该怎么办?如果调用代码不向用户提供控制台(如我所做的),程序是否会“挂起”?理论上,这可能会成为一个问题。但本地“svn状态”不应要求从控制台输入。您可能会创建一些自定义InputStream,在尝试从中读取时引发IOException。svnkit cli上有文档吗?源代码中似乎没有任何JavaDoc,至少1.7.11.0运行得很好。非常感谢你!使用System.in是否会成为一个问题?如果我不确定命令是否真的会尝试获取输入,该怎么办?如果调用代码不向用户提供控制台(如我所做的),程序是否会“挂起”?理论上,这可能会成为一个问题。但本地“svn状态”不应要求从控制台输入。您可能会创建一些自定义InputStream,在尝试从中读取时引发IOException。svnkit cli上有文档吗?源代码中似乎没有任何JavaDoc,至少在1.7.11中是这样。
AbstractSVNCommand.registerCommand(new SVNStatusCommand());

final ByteArrayOutputStream bos = new ByteArrayOutputStream();
final PrintStream stream = new PrintStream(bos);

final SVNCommandLine commandLine = new SVNCommandLine();
commandLine.init(new String[] {"status", "d:/svntest/small.svn17"});

final SVNCommandEnvironment env = new SVNCommandEnvironment("mySvn", stream, stream, System.in);
env.init(commandLine);
env.initClientManager();

final SVNStatusCommand svnStatusCall = new SVNStatusCommand();
svnStatusCall.init(env);
svnStatusCall.run();
stream.flush();
System.out.println(new String(bos.toByteArray()));