svn - 获取 svn : E170000: Unrecognized URL scheme for my custom Svn Gradle plugin

标签 svn groovy gradle

我使用 groovy 编写了一个自定义 gradle 插件来执行基本的 svn 任务,例如 Checkout、Clean、Tag 等。groovy 类调用 svn 命令行客户端来执行这些操作,当我在我的 Windows 系统上运行它时它工作正常但同样当我在 linux 系统 (Centos) 上运行插件时,它会出现以下错误。

svn: E170000: Unrecognized URL scheme for '%22https://source.mycompany.net/svn/MyProject/trunk%22'



我能够通过命令提示符或 shell 脚本对命令行客户端进行相同的调用,而不会出现任何问题。那么和有什么区别

这是我的代码示例:
    String command =String.format("svn co -r %d  --non-interactive --trust-server-cert --          username %s --password %s --depth infinity \"%s\" \"%s\"",
                                          getRevision(),
                                          getUserName(),
                                          getUserPassword(),
                                          getSrcUrl(),
                                          getDir());

    Process svnProcess = Runtime.getRuntime().exec(command);

    BufferedReader stdInput = new BufferedReader(new     InputStreamReader(svnProcess.getInputStream()));
BufferedReader stdError = new BufferedReader(new  InputStreamReader(svnProcess.getErrorStream()));
    String statusOutputLine =""
    while ((statusOutputLine = stdInput.readLine()) != null)
    {
    logger.quiet(" " + statusOutputLine);
    }

    while (( statusOutputLine = stdError.readLine()) != null)
    {
    logger.error(statusOutputLine)
    throw new Exception(statusOutputLine)
    }
    logger.quiet("Successfully Checked out the work space")

我确实在系统上安装了 NEON

-bash-4.1$ svn --version
svn,版本 1.6.11 (r934486)
编译 2011 年 6 月 25 日,11:30:15

版权所有 (C) 2000-2009 CollabNet。
Subversion 是开源软件,见 http://subversion.tigris.org/
本产品包括由 CollabNet (http://www.Collab.Net/) 开发的软件。

以下存储库访问 (RA) 模块可用:
  • ra_neon :使用 Neon 通过 WebDAV 协议(protocol)访问存储库的模块。
  • 处理“http”方案
  • 处理“https”方案
  • ra_svn :用于使用 svn 网络协议(protocol)访问存储库的模块。
  • 使用 Cyrus SASL 身份验证
  • 处理“svn”方案
  • ra_local :用于访问本地磁盘上的存储库的模块。
  • 处理"file"方案
  • 最佳答案

    错误消息似乎很清楚,您传递的 URL 在单引号内。请注意它的前导和尾随 %22 . %22怎么样"在 URL 中编码。

    问题是您假设您的命令将通过 shell 运行。它不会。所以你的引号变成了传递给命令的文字。相反,任何空格都会被拆分为单独的参数,而不考虑引号。

    如果您想控制参数的拆分,您应该生成一个列表而不是单个字符串。

    该文档很重要(特别是选项 1 下的 Gotchas 部分):
    http://groovy.codehaus.org/Executing+External+Processes+From+Groovy

    关于svn - 获取 svn : E170000: Unrecognized URL scheme for my custom Svn Gradle plugin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19732179/

    相关文章:

    apache - SubVersion : upgrade from 1. 7.4 到 1.8.11 mod_authz_svn 问题

    java - 使用 Spring Boot 和 Spock 进行集成测试

    android - 无法在Idea中导入gradle android项目

    android - 编译 “com.android.support:appcompat-v7:23.0.1”有什么用?

    git-svn 不适用于 Ubuntu 18.04.1 LTS

    svn - 如何删除文件夹的 Subversion 控制?

    java - 使用 Java 进行 Groovy 元编程

    arrays - 如何断言集合中的每个项目都在范围内

    java - 如何将本地 .jar 文件依赖项添加到 build.gradle 文件?

    svn - 无法连接到 Subversion 本地存储库