5

私の知る限り、maven-release-pluginを使用するには、scmセクションをPOMファイルにドロップする必要があります。例えば:

<scm>
    <connection>scm:hg:ssh://hg@bitbucket.org/my_account/my_project</connection>
    <developerConnection>scm:hg:ssh://hg@bitbucket.org/my_account/my_project</developerConnection>
    <url>ssh://hg@bitbucket.org/my_account/my_project</url>
    <tag>HEAD</tag>
</scm>

このデータは、タグ付けする対象と変更をプッシュする場所を決定するために使用されることを理解しています。しかし、コードを複製/チェックアウトしている場合、この情報はすでに利用可能ではありませんか?少なくとも理論的には、Git / HG / SVN / CVSにどのコードを処理しているかを尋ねるだけで、タグ付けする必要のあるコードをMavenに伝える必要があるという概念に少し苦労しています。詳細に何かが欠けているのではないかと思いますが、何がわかりません。maven-release-pluginコードを変更して、これを要件として削除するか、少なくとも自動検出をデフォルトにすることはできますか?そうでない場合、誰かがそれがうまくいかない理由についていくつかのコンテキストを提供できますか?

4

1 に答える 1

4

一つには、GITとSubversionは、読み取り/書き込みアクセスと読み取り専用アクセスに対して異なるSCMURIを持つことができます。

これは、異なるURIがキャプチャすることになっているもの<connection>です<developerConnection>。1つ目は、読み取りアクセスが保証されているURIです。2つ目は、書き込みアクセスが保証されているURIです。

チェックアウトされたリポジトリから非常に多くの場合、正規URIを推測することはできません。

たとえば、svn:プロトコルとサーバーのIPアドレスを介して社内でSubversionリポジトリをチェックアウトする場合がありますが、外部の寄稿者はhttps://ホスト名を使用する必要があります。

または、GITリポジトリを使用している場合でも、Githubには、アクセスメカニズムごとに異なるURIがあります。

  • https://github.com/stephenc/eaio-uuid.git(ユーザー名/パスワードまたはOAuthを使用した読み取り/書き込み)
  • git@github.com:stephenc/eaio-uuid.git(SSH秘密鍵IDを使用した読み取り/書き込み)
  • git://github.com/stephenc/eaio-uuid.git(匿名の読み取り専用)

ローカルチェックアウトをチェックアウトまたは複製した可能性があることを気にしないgit://github.com/zznate/eaio-uuid.gitでください。つまり、ローカルgitリポジトリは「アップストリーム」である../eaio-uuid-from-nateとは限らない可能性があります。git@github.com:stephenc/eaio-uuid.git

一部のSCMツールでは、自動検出できることに同意します...たとえば、ソースがAccuRevからチェックアウトされていることがわかっている場合は、Subversion、GIT、またはCVSに到達するまで、その詳細を想定して問題ありません。または、コードモジュールがAccuRevワークスペース(実​​話)にチェックアウトして、プルされていたタグを更新できるようにしました。

つまり、検出コードは、どちらがマスターSCMであるかを確認するために、2つのSCMシステムを同時に使用していないことを確認する必要があります...そして他のSCMはディスク上にマーカーファイルを残していない可能性がありますスニッフィングアウト(たとえば、AccuRevは...それ故に私がそれを選んだ理由)

唯一の安全な方法は、少なくともSCMシステムを定義するようにpomに要求することです。また、URIを確実に推測できないSCMシステムの場合(CVS、Subversion、GIT、HG、実際にはそれらのほとんどを考えてください)、URIを要求します。指定する。

于 2013-02-04T11:55:27.503 に答える