6

アプリケーション全体で使用する必要があるプロジェクトのバージョンを定義するセクションを持つ会社全体の親 pom があり<dependencyManagement>、その一部は次のように SNAPSHOT です。

<dependencyManagement>
  <dependencies>
    ...
    <dependency>
      <groupId>my.group</groupId>
      <artifactId>myArtifact</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
    ...
  <dependencies>
</dependencyManagement>

親 pom で実行するrelease:prepareと、これらの SNAPSHOT は削除されません。その結果、親から継承するプロジェクトは、リリース時にそのバージョンを使用できなくなります。<dependencyManagement>リリース時に親 pomのセクションが確実に更新されるようにするにはどうすればよいですか?

この質問を見ました: Maven リリース プラグインが依存関係管理で SNAPSHOT バージョンを許可するのはなぜですか? 、しかし、言及されたチケットは、プラグインの以前のバージョンで修正されると主張しています.

Maven Release Plugin 2.3.1
Apache Maven 3.0.4 (r1232337; 2012-01-17 08:44:56+0000)
Java version: 1.6.0_31, vendor: Sun Microsystems Inc.
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
4

2 に答える 2

1

準備しているビルドの一部ではないアーティファクトをリリースしようとしていますか? relase:perform を作成する場合、プラグインが存在しない場合、どのアーティファクトをリポジトリにアップロードする必要がありますか? (もしそうなら、なぜスナップショットのバージョンを入れるのですか?)
@khmarbaise が言ったように、プラグインはリアクターの一部ではない SNAPSHOTS を削除しないと思います (プラグインはそれらがサードパーティの依存関係であると考える場合があります)。

これはコメントです。コメントを投稿する評判がまだないので、回答として入れました...そして私の英語でごめんなさい!

于 2012-06-08T12:05:57.527 に答える
1

は、セクションに -s がmaven-release-pluginあるかどうかのチェックのみに関係しています。は、この親を拡張するすべてのモジュールによって継承されます。ビルドする前に、常にこれらの依存関係を解決しようとします。SNAPSHOT<dependencies/><dependencies/>

<dependencies/>セクションとセクションの違いは<dependencyManagement/>、後者は使用されるバージョンのみを定義することです。SNAPSHOTこの親プロジェクトがアグリゲーターまたはアグリゲーターの一部であり、この親がアグリゲーターで全体としてリリースされている場合を除き、そこに -sを定義した場合、リリース プラグインはまったく関係ありません。

同様に、maven-release-plugin は を処理しません<pluginManagement/>。また、関連するアーティファクト バージョンを含む Maven プロパティのみに対応していると思います<dependencies/>

最悪の部分は、私が思い出す限り、依存関係/プラグインにSNAPSHOTバージョンがあり、それが<*Management/>セクションにある場合、警告さえ受けないことです。

このため、私が頼ったアプローチは<properties/>、アーティファクトのバージョンを含む親 POM を持つことです。リリースする前に、SNAPSHOTgrep を使用して -s をスキャンします。

grep SNAPSHOT pom.xml
于 2012-06-08T13:37:10.757 に答える