1

更新解決策がないように思われるため、この質問を終了するようフラグを立てています-プラグインが本来の動作をしていないだけで、誰もその理由を知らないようです. scmやなどの他のプラグインを使用して、リリースプラグインの望ましい動作を自分で手動で複製する小さなプログラムを作成することになりversionsました。私がこれをどのように行ったかについての情報が必要な場合は、お気軽に私にメールしてください。


最近、プロジェクトをmavenに移動しました。ただし、リリースプロセスに問題があります。

私のリリース手順は次のとおりです。

mvn scm:checkout -DconnectionUrl=scm:svn:https://my-server/svn/my-project/trunk -DcheckoutDirectory=my-project
cd my-project
mvn --batch-mode release:prepare
mvn release:perform

で開始し1.0.0-SNAPSHOT、上記のリリース手順を実行します。これにより、私のレポが次のように更新されます(新しさの昇順)。

1.0.0-SNAPSHOT
1.0.0
1.0.1-SNAPSHOT

pom.xml更新されたポイントや、SCM で作成され1.0.1-SNAPSHOTたというタグなど、すべてが期待どおりに発生します。my-project-1.0.0ただし、手順を再度実行すると、リポジトリに次のように表示されます。

1.0.0-SNAPSHOT
1.0.1-SNAPSHOT
1.0.0
1.0.2-SNAPSHOT

つまり、リリース 1.0.1 は作成されず、代わりに 1.0.1-SNAPSHOT が 1.0.0 にリリースされます。他のすべての側面が期待どおりに実行されることに注意してください。pom.xml現在、 は を指して1.0.2-SNAPSHOTおり、SCM に という名前のタグが作成されていますmy-project-1.0.1

実際、リリース手順を実行するたびに SNAPSHOT は増加しますが、リリースは 1.0.0 に書き込まれ、新しいリリースは作成されません。たとえば、リリース手順をさらに 3 回再実行すると、次のようになります。

1.0.0-SNAPSHOT
1.0.1-SNAPSHOT
1.0.2-SNAPSHOT
1.0.3-SNAPSHOT
1.0.4-SNAPSHOT
1.0.0
1.0.5-SNAPSHOT

上記の予想される動作は次のとおりです。

1.0.0-SNAPSHOT
1.0.0
1.0.1-SNAPSHOT
1.0.1
1.0.2-SNAPSHOT
1.0.2
1.0.3-SNAPSHOT
1.0.3
1.0.4-SNAPSHOT
1.0.4
1.0.5-SNAPSHOT

pom.xml最初のバージョンの を以下に示します。

<project xmlns="http://maven.apache.org/POM/4.0.0" x mlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.foo</groupId>
<artifactId>my-project</artifactId>
<packaging>jar</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>my-project</name>

<distributionManagement>
    <repository>
        <id>my-server</id>
        <url>file://\\my-server\repo\</url>
    </repository>
</distributionManagement>

<scm>
    <developerConnection>scm:svn:https://my-server/svn/my-project</developerConnection>
</scm>

<build>
    <plugins>

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

    </plugins>


</build>

<repositories>
    <repository>
        <id>my-server</id>
        <url>file://\\my-server\repo\</url>
    </repository>
</repositories>

</project>

release以下の回答の1つは、私が持っていない別のsnapshotレポを作成する必要があることを示唆しています。これが問題の原因になっている可能性はありますか?

mvn deployコードがコミットされるたびに Jenkins を使用して自動的に呼び出すことに注意してください。ただし、これは期待どおりに動作しているため(つまり、リポジトリへのコミットで指定されているバージョンをデプロイするpom.xml)、これが問題の一部であるとは思えません。

ご協力いただきありがとうございます。


アップデート

コマンドからの出力を調べるとmvn release:perform、次のように表示されます。

Checking out the project to perform the release ...
Executing: cmd.exe /X /C "svn --non-interactive checkout https://my-server/svn/my-project/tags/my-project-1.0.2 c:\localrelease\mvn\my-project\target\checkout"
Working directory: c:\localrelease\mvn\my-project\target
Invoking perform goals in directory c:\localrelease\mvn\my-project\target\checkout\tags\my-project-1.0.0\trunk
Executing goals 'deploy'...

1.0.0そして、毎回リリースする理由があります-更新されたタグをチェックアウトしますが、古い1.0.0タグでリリースします(1.0.1タグがターゲット/チェックアウトフォルダーに存在する場合でも)。なぜこれを行うのですか?


更新 2

2 つの別々のリポジトリ (スナップショット用とターゲット用) に分割しましたが、この問題は引き続き発生します。

release:performまた、ログをさらに調査したときに気づいたこと: タグのチェックアウトにはmy-project-1.0.1のタグが含まれてい1.0.0ます。同様に、タグのチェックアウトにはタグやなど1.0.2が含まれます。これは正しい動作ですか?1.0.01.0.1

おそらく、リリース プロセスは常に、チェックアウトするすべてのタグ フォルダーを検索し、最初に見つかったものを使用します。これは、最初のリリースを除く1.0.0すべてのリリースに常に適用されます。

これは非常に奇妙な説明のように思えますが、私が見た動作についてこれまでのところ唯一の説明です。pom.xml問題は、これを発生させるために誤って構成したものは何ですか?

別の注意: release を実行すると、 deploy ゴールは'build.plugins.plugin.version' for org.apache.maven.plugins:maven-xxxx-plugin is missing.for maven-javadoc-pluginmaven-deploy-pluginand maven-source-plugin. これらを明示的に追加する必要がありますか?

4

2 に答える 2

4

最初のことは、間違ったバージョンから始めていることです:

  1. 最新のコードをチェックアウトします (最新の pom は現在 1.0.0 を指しています)
  2. 新しいバージョン 1.0.1-SNAPSHOT を作成します
  3. 1.0.1-SNAPSHOT を指すように pom を更新し、それをコミットします

通常の方法は、SNAPSHOT バージョン (最初の開発ステップでもあります) から開始することです。これは、SNAPSHOT がリリースに向けて開発中であることを示しているためです。

  1. バージョン 1.0.0-SNAPSHOT で最新のコードをチェックアウト
  2. SVN にタグ 1.0.0 を作成し、新しい pom を作成します (詳細な手順については maven-release-prepare を参照してください)。
  3. 新しいバージョン 1.0.1-SNAPSHOT を作成します

その後、 release:perform は次のことを行います:

タグ付けされたバージョン 1.0.0 をチェックアウトし、site-deployをデプロイします( maven-release-perform )

そして、リリースサイクルの次の呼び出しは、1.0.1-SNAPSHOT から 1.0.1 リリースへ、そして次の開発サイクルのために 1.0.2-SNAPSHOT へと進みます。

上記とは別に、ファイル リポジトリの代わりに、Artifactory、Nexus、Archivaなどのリポジトリ マネージャーを使用する必要があります。RepoMgmt の場合、SNAPSHOT 用とリリース用に別々のリポジトリがあり、SNAPSHOT リポジトリを時々クリーンアップする可能性があります。次のように、正しい方法でファイル アクセスをセットアップすることもできます。

<distributionManagement>
    <repository>
      <id>releases</id>
      <url>file:///C:/maven/releases</url>
    </repository>
    <snapshotRepository>
      <id>snapshots</id>
      <url>file:///C:/maven/snapshots</url>
    </snapshotRepository>
    <site>
      <id>site</id>
      <url>file:///C:/maven/sites/${project.groupId}/${project.artifactId}/${project.version}</url>
    </site>
</distributionManagement>

さらに、別の SNAPSHOT とリリース リポジトリを作成すると、リリース リポジトリと SNAPSHOT リポジトリでメタデータ ファイルの外観が異なります。

デフォルトのリリース サイクルは、次のように SNAPSHOT から次の SNAPSHOT にリリースされます。

1. Cycle
1.0.2-SNAPSHOT
1.0.2
1.0.3-SNAPSHOT

2. Cycle
1.0.3-SNAPSHOT
1.0.3
1.0.4-SNAPSHOT

3. Cycle
1.0.4-SNAPSHOT
1.0.4
1.0.5-SNAPSHOT

and so forth.
于 2013-05-16T18:04:48.347 に答える
0

connection私はまったく同じ問題を抱えていましたが、問題は SCMとdeveloperConnection構成であることが判明しました。標準の SVN レイアウト (トランク、ブランチ、タグ) を使用してきましたが、レポのルート カタログの URL を提供しました。

<scm>
    <connection>scm:svn:file:///C:/var/svn/main</connection>
    <developerConnection>scm:svn:file:///C:/var/svn/main</developerConnection>
</scm>

代わりに、の URL を提供する必要がありましたtrunk

<scm>
    <connection>scm:svn:file:///C:/var/svn/main/trunk</connection>
    <developerConnection>scm:svn:file:///C:/var/svn/main/trunk</developerConnection>
</scm>

それで全部です。を追加すると、現在の に従ってモジュールが公開されまし/trunkた。maven-release-pluginproject.version

于 2015-07-27T14:20:20.883 に答える