0

チェックアウト、クリーン、タグなどの基本的な svn タスクを実行するために、groovy を使用してカスタム gradle プラグインを作成しました。groovy クラスは、これらの操作を行うために svn コマンド ライン クライアントを呼び出します。Windows システムで実行すると正常に動作しますが、同じプラグインを Linux システム (Centos) で実行すると、次のエラーが発生します。

svn: E170000: '%22https://source.mycompany.net/svn/MyProject/trunk%22' の URL スキームを認識できません

コマンドプロンプトまたはシェルスクリプトを使用して、コマンドラインクライアントに同じ呼び出しを問題なく行うことができます. では、との違いは何ですか

ここに私のコードサンプルがあります:

    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 にコンパイル

Copyright (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 : ローカル ディスク上のリポジトリにアクセスするためのモジュール。
    • 「ファイル」スキームを処理します
4

1 に答える 1

0

エラー メッセージは非常に明確に見えます。渡す URL は一重引用符で囲まれています。先頭と末尾に%22. %22は URL でどのよう"にエンコードされますか。

問題は、コマンドがシェルを介して実行されると想定していることです。ならない。したがって、引用符はコマンドに渡されるリテラルになります。代わりに、引用符に関係なく、空白は個別の引数に分割されます。

引数の分割を制御したい場合は、単一の文字列ではなくリストを生成する必要があります。

このドキュメントは適切です (特に、オプション 1 の注意点セクション): http://groovy.codehaus.org/Executing+External+Processes+From+Groovy

于 2013-11-04T21:50:09.560 に答える