当前位置: 首页 > 知识库问答 >
问题:

Java ProcessBuilder无法处理空间和配额

简滨海
2023-03-14

我正在尝试用java编写一个简单的应用程序,它将使用git-tfs自动克隆从TFS到Git repo的整个主干。为了从用户那里获取数据,我使用了一些jtext字段。在其中一个jtext字段中,用户必须写入主干名称。一切正常,但是,如果主干名称包含空格,整个git-tfs进程就不会启动,git tfs日志说要尊重synoophs。

要运行git-tfs,synoophs是:

$ git-tfs.exe --username <username> --password <password> <server-url> <trunk-name> <working-folder-path>

锿。:

$ git-tfs.exe --username=myusernamename --password=mypassword http://127.0.0.1:8080/DefaultCollection $/TrunkName C:\workingFolder

这里我的代码:

commands = new ArrayList<String>();
commands.add("C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe");
commands.add("/c");
commands.add("git-tfs.exe");
commands.add("--username=" + usernameTextField.getText());
commands.add("--password=" + passwordTextField.getText());
commands.add(serverUrlTextField.getText());
commands.add(trunkTextField.getText());
commands.add(workingFolder.getText());
ProcessBuilder pb = new ProcessBuilder(this.commands);
Process process = pb.start();

在网上冲浪时,我找到了一个git tfs的解决方案,它将中继名称写入配额中,如$/“trunk name/some/path”。使用powershell中的配额运行git tfs一切正常,但在jtextfield应用程序中编写同样的代码无法再次运行。

为了测试process builder,我尝试使用命令修改ArrayList,方法是手动添加修改后的字符串,使其出现:

...
this.commands.add("$/\"trunk name\"");
...

即使这样也不行,所以我试着:

...
this.commands.add("$/\\\"trunk name\\\"");
..

这是可行的。

在此之后,我试图在jtextfield上写同样的内容,但它无法工作。我如何解决这个问题,从jTextField解析文本,让processBuilder工作?

非常感谢。

共有1个答案

柴浩大
2023-03-14

我通过从ProcessBuilder更改为Runtime来解决这个问题,所以现在我的代码是:

commands = new ArrayList<String>();
commands.add("C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe");
commands.add("/c");
commands.add("git-tfs.exe");
commands.add("--username=" + usernameTextField.getText());
commands.add("--password=" + passwordTextField.getText());
commands.add(serverUrlTextField.getText());
commands.add(trunkTextField.getText());
commands.add(workingFolder.getText());
Runtime runtime = Runtime.getRuntime();
String[] commandsStringArray = commands.toArray(new String[0]);
Process process = runtime.exec(commandsStringArray);

并检查项目名称,如下所示:

    private String fixProjectName(String projectName) {
    if (projectName.contains(" ")) {
        String correct = "";
        correct = projectName.replace("$/", "");
        correct = "$/\\\"" + correct + "\\\" ";
        this.projectName = correct;
        return correct;
    }
    return projectName;
}

顺便说一句,我也想知道如何让ProcessBuilder工作。

每个更好的想法都是受欢迎的。

非常感谢。

 类似资料:
  • 我引用了irbanana关于支持PostGIS的空间数据类型的回答。我正在使用MySQL,并试图为自定义数据类型实现EWKBGeomPoint。 我的Gorm模型: 据我所知,MySQL支持这样的插入: 或 如果我使用自己的来满足的界面: 包括在内的整个值在Gorm的单引号中引用,因此它不起作用: 我如何让它工作? 编辑1: 我追踪Gorm代码,最终得到了的函数。在它内部检查且为真,则它进入调用,

  • 我是Spring的新人。最近我试着让Spring批处理和Spring集成一起工作。我想有一个JobListener,它会监听消息到达特定的频道并启动Spring批处理作业。 我在github上找到了一个例子(https://github.com/chrisjs/spring-batch-scaling/tree/master/message-job-launch)我试图以某种方式将Spring批处

  • 我有这样一个问题:我可以写到一个带有地理类型列的Postgis表,并且数据输入正确。当我试图取回它时,我得到了一个java.lang.IllegalArgumentException:不能转换org.PostgreSQL.util.PGObject类型的对象 我使用的是Hibernate Spatial 4.0M1、PostGIS2.0.2、Postgresql 9.1.7和Spring3.2、P

  • 我无法在我的Kotlin Spring Boot应用程序中正确地注入应用程序属性。在我的文件中定义并随后在文件中引用的属性(在resources->META-INF下)没有正确地添加到bean表达式上下文中。使用,当我将鼠标悬停在该属性上时,我会看到错误。试图运行应用程序(将配置属性值construction-inject到类中)会导致通过构造函数参数表示的

  • Spring Security中主要的提高验证服务的接口是AuthenticationManager,这通常是一个Spring Security的ProviderManager 类的实例。如果你以前用过框架你可能已经熟悉了。如果不是后面的技术预览章节会讲到。这个bean是通过authentication-manager命名空间来注册。你不能使用自定义的AuthenticationManager如果