【问题标题】:Getting svn: E170000: Unrecognized URL scheme for my custom Svn Gradle plugin获取 svn:E170000:我的自定义 Svn Gradle 插件无法识别的 URL 方案
【发布时间】:2013-11-12 23:22:01
【问题描述】:

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

svn: E170000: 无法识别的 URL 方案 '%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")

我确实在系统上安装了霓虹灯

-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 协议访问存储库的模块。
    • 处理“http”方案
    • 处理“https”方案
  • ra_svn :用于使用 svn 网络协议访问存储库的模块。
    • 具有 Cyrus SASL 身份验证
    • 处理“svn”方案
  • ra_local :用于访问本地磁盘上的存储库的模块。
    • 处理“文件”方案

【问题讨论】:

    标签: svn groovy gradle


    【解决方案1】:

    错误信息看起来很清楚,您传递的 URL 在单引号内。请注意它的前导和尾随%22%22" 在 URL 中的编码方式。

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-14
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多