在linux框中,我正在制作以下SVN import
命令:
svn import
--non-interactive
--trust-server-cert
--username username
--password password
-m "a message"
/path/to/local.zip
https://sub.domain.net/path/to/export.zip
当我自己从命令行调用它时它没有问题。
但是,如果我使用Java命令提示符进行此调用,则会收到import
命令中有太多参数的错误消息。
有谁知道造成这种情况的原因是什么?
附加说明
如果我将Java生成的svn import
命令从我的日志文件复制并粘贴到控制台,那么导入将按预期工作。
我可以在Java中使用SVN export
命令而没有任何问题
我尝试过使用单'
个引号
进行这些调用的代码如下:
private void exportToSvn()
String command = String.format(
"svn import --non-interactive --trust-server-cert " +
"--username %s --password %s -m %s %s %s",
username, password, "\"a message\"", "/path/to/local.zip",
"https://sub.domain.net/path/to/export.zip"
);
command( command );
}
private void command( String... commands ) throws IOException, InterruptedException {
Runtime rt = Runtime.getRuntime();
for( String command : commands ){
Process pr = rt.exec( command );
BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
logger.debug( command );
String line;
while ( (line = input.readLine()) != null)
logger.debug("> " + line);
}
答案 0 :(得分:1)
我建议您使用推荐的ProcessBuilder代替Process。它为您提供了更多的执行控制,并允许指定参数列表。它可以解决您的问题,只需要对代码进行微小的修改。
答案 1 :(得分:1)
在匿名提示之后(评论者在我抓住他们的名字之前删除了他们的评论) - 我发现问题在于引号,因为它们无法在Process
内转义(见this question)。
String message = "\"Some message\""; //quotes aren't escaped
我发现解决此问题的方法是以char
格式包含引号:
String message = String.format( "%sSome message%s", (char)34 ); //quotes as char
答案 2 :(得分:0)
尝试使用终端
提交文件如果文件夹名称中有空格,只需在空格
之前使用后缀斜杠例如:
svn import -m“这里我要提交”/ Users / Ram / Documents / Ram \ file1 / http://svnlocation/ svnFolder \ 2654 /
这里我的文件名是: Ram file1
SVN文件夹名称为: svnFolder 2654
请确保在此期间没有额外的空格 复制。