次のように、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を使用してチェックされます)。