0

次のように、POM ファイルで SCM URL を使用しています。

<scm>
    <connection>scm:hg:file:///${basedir}</connection>
    <developerConnection>scm:hg:file:///${basedir}</developerConnection>
</scm>

「mvn release:prepare -DpushChanges=false」でリリース プロセスを開始する必要がありますが、とにかくそれを行う必要がありました (hg プラグインは認証を正しく処理しません)。私たちにとって大きな利点は、リリース プロセスがどこかでうまくいかなかった場合に "hg strip" できることです。

Mercurial チェックアウト内にディレクトリがある場合、同じプロセスが機能します。その場合、次の URL でうまくいきます。

<scm>
    <connection>scm:hg:file:///${basedir}/..</connection>
    <developerConnection>scm:hg:file:///${basedir}/..</developerConnection>
    <tag>HEAD</tag>
</scm>

しかし、そこに別のレベルがあると、すべてがうまくいきません。ファイル URL のさまざまなバリエーションを試しましたが、すべて失敗するようです。

「scm:hg:file:///${basedir}/../..」を使用する単純な方法では、サイト プラグインとリリース プラグインの両方が失敗します。前者は次のように教えてくれます。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.2:site (default-site) on project epik-protocol-spec: Execution default-site of goal org.apache.maven.plugins:maven-site-plugin:3.2:site failed: This SCM url 'scm:hg:file:///../epik-protocol-spec' is invalid due to the following errors:
[ERROR] * An hg 'file' url must be on the form 'file:///' or 'file://localhost/'.
[ERROR] For more information about SCM URL Format, please refer to: http://maven.apache.org/scm/scm-url-format.html

(「epik-protocol-spec」は、実行中のビルド内のモジュールの名前です)

リリース プラグインでも同様の問題が発生します。release:prepare の後、release.properties ファイルの scm.url が「file:///..」に設定され、リリース中にタグ付きコードのコピーを取得できなくなります。 :実行。これを回避するには、手順の間にプロパティを手動で修正します。サイトのビルドを機能させる方法をまだ見つけていません。

私の目標は次のとおりです。

  • 箱から出してすぐに動作するビルドを持っている (つまり、IDE からプロジェクトを複製し、任意のターゲットを実行する)
  • ビルド サーバーでサイトを生成 (および他のビルドを実行) できる
  • プッシュする前にすべての変更をレビューして、リリース プラグインを使用してリリースを実行できる

これに対する解決策はありますか?また、なぜ URL がこれほどひどく壊れてしまうのでしょうか? アプローチが悪いのでしょうか、それとも Maven の問題に遭遇したのでしょうか?

編集

チャーリーが提案したように、mvn help:effective-pom の出力を確認しました。SCM URL はその中で壊れています。また、Maven がモジュール名を URL に追加することも示しています。これは、各モジュールで URL を定義する必要があることを意味します (奇妙なマングリングを停止できると仮定すると)。

次のようなカスタム プロパティ:

<properties>
    <test.property>scm:hg:file:///${basedir}/../..</test.property>
</properties>

マングルされず、期待どおりに解決されます(有効なPOMを使用してチェックされます)。

4

2 に答える 2

1

Maven SCM プロバイダーは、「../」および「..\」マッチング スキームに基づいて URL を短縮しています。これらの文字シーケンスのいずれかが一致すると、一致するスラッシュ (直前のスラッシュを過ぎて) を逆方向に検索し、そこまでのすべてを削除します。このルールは、ファイルの URL が次のようになることを意味していました。

scm:hg:file:///C:\some\local\path/../..

「../」シーケンスによる短縮がトリガーされ、その後、「C:」の前のスラッシュに戻ることを意味する前のスラッシュに戻り、パス全体が削除されます

ドットの後ろにスラッシュがない場合、この動作はトリガーされないため、URL の最後にステップアップしても害はありませんでした。これが、1 レベル上に移動しても問題がなかった理由を説明しています。

解決策(回避策?)は、これを使用することです:

scm:hg:file:///${basedir}${file.separator}..${file.separator}..

その後、URL 短縮は OS に関係なく一致するスラッシュに遭遇し、再び機能し始めます。

于 2013-03-11T06:10:30.380 に答える