6

次のサンプル マルチモジュール プロジェクトがあるとします。

  • aggr/pom.xml (バージョン 1.0-SNAPSHOT)
  • aggr/parent/pom.xml (バージョン 2.0-SNAPSHOT)
  • aggr/app/pom.xml (バージョン 3.0-SNAPSHOT)
  • aggr/comp1/pom.xml (バージョン 4.0-SNAPSHOT)

ここで、parent は他のすべての pom の親であり、アプリには comp1 の依存関係があります。

release:prepare/perform によるリリースは、aggr フォルダーが svn リポジトリー (repository/trunk/aggr/ parent.pomなど) 内で同じ構造を持っている限り、正常に機能します。

同じプロジェクトを使用したいが、svn:externals を使用する場合、リリース プラグインは動作せず、comp1:

Can't release project due to non released dependencies : parent:pom:2.0-SNAPSHOT

リポジトリ構造は次のようになります

  • リポジトリ/aggr/trunk/pom.xml
  • リポジトリ/親/トランク/pom.xml
  • リポジトリ/アプリ/トランク/pom.xml
  • リポジトリ/comp1/trunk/pom.xml

aggr フォルダーはモジュール トランクを指す外部ファイルを使用するため、チェックアウトされた作業コピーは上記のようになります。

Maven が外部に基づいてモジュールを異なる方法で処理するのはなぜですか? これを克服する方法はありますか?

編集: svn:externals プロジェクトの pom ファイル。他のプロジェクトの pom ファイルとの唯一の違いは、scm タグです。他の非外部プロジェクトでは、アグリゲーターのみが scm タグを持っています。

外部の親 po.xml

<groupId>small.test</groupId>
<artifactId>parent</artifactId>
<version>2.0-SNAPSHOT</version>

<scm>
    <connection>scm:svn:http://localhost/svn/small-test-ext/parent/trunk/</connection>
    <developerConnection>scm:svn:http://localhost/svn/small-test-ext/parent/trunk/</developerConnection>
    <url>http://localhost/svn/small-test-ext/parent/trunk/</url>
</scm>

<build>
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>2.4.1</version>
    </plugin>
</plugins>

外部 aggr-pom.xml small.test 親 2.0-SNAPSHOT

<groupId>small.test</groupId>
<artifactId>aggr</artifactId>
<version>1.0-SNAPSHOT</version>

<scm>
    <connection>scm:svn:http://localhost/svn/small-test-ext/aggr/trunk/</connection>
    <developerConnection>scm:svn:http://localhost/svn/small-test-ext/aggr/trunk/</developerConnection>
    <url>http://localhost/svn/small-test-ext/aggr/trunk/</url>
</scm>

<modules>
    <module>parent</module>
    <module>comp1</module>
    <module>comp2</module>
    <module>app</module>
</modules>

外部 app-pom.xml

<parent>
    <groupId>small.test</groupId>
    <artifactId>parent</artifactId>
    <version>2.0-SNAPSHOT</version>
</parent>
<groupId>small.test</groupId>
<version>3.0-SNAPSHOT</version>

<artifactId>app</artifactId>
<packaging>jar</packaging>

<scm>
    <connection>scm:svn:http://localhost/svn/small-test-ext/app/trunk/</connection>
    <developerConnection>scm:svn:http://localhost/svn/small-test-ext/app/trunk/</developerConnection>
    <url>http://localhost/svn/small-test-ext/app/trunk/</url>
</scm>

<dependencies>  
    <dependency>
    <groupId>small.test</groupId>
    <artifactId>comp1</artifactId>
    <version>4.0-SNAPSHOT</version>
</dependency>

ありがとうコンラッド

4

1 に答える 1

2

mvn:release現在のプロジェクトでは、プロジェクトまたはモジュールが異なる svn リポジトリにあるため、それぞれに対して実行する必要があります。1 つだけ実行する場合mvn:release、リポジトリは次のようになります。

svn_repository: branches/
            tags/
            trunk/
                  parent
                  comp1
                  comp2
                  app
                  pom.xml
于 2013-10-28T14:19:49.520 に答える