2

、マルチモジュール、マルチプロジェクト、親POMなどについてかなりのヒントを見つけましたmaven-release-pluginが、それらはすべて私が持っているものに完全には適合しません:

私はいくつかのプロジェクトを持っています (簡略化されたケースは 2 つです:project-commonproject-impl)互いに多少分離しており、別々の git リポジトリで開発されていますが、通常は一緒にリリースされています。この目的のために、以下project-common/pom.xmlが含まれます。

<groupId>de.tarent.example</groupId>
<artifactId>project-common</artifactId>
<version>1.5.1.4-SNAPSHOT</version>

…そして以下をproject-impl/pom.xml含む:

<groupId>de.tarent.example</groupId>
<artifactId>project-impl</artifactId>
<version>1.5.1.4-SNAPSHOT</version>

<dependencies>
    <dependency>
        <groupId>de.tarent.example</groupId>
        <artifactId>project-common</artifactId>
        <version>${project.version}</version>
    </dependency>

親 POMはありません。

ここでの考え方は、通常は のバージョンをproject-commonすべてのプロジェクトに使用することですが、1 つのプロジェクトのみを個別にリリースできる場合もあります。そのような場合、もちろん、依存関係のバージョンを手動で変更する必要がありますが、それは問題ありません。

現在、Jenkins の「Perform Maven Release」を使用してリリースを作成しています。(まあ、私たちは望んでいます。プロジェクトは最近までリリースできなかったので、開発者は手動で作成し、一時ファイル、未使用のファイル、ローカルの変更、XML 構成の LDAP パスワード、エディター.swpファイルなどを完備しました。理由がわかります。 Java™MavenJenkinsを知らなかったにもかかわらず、私はこれを変更する任務を負っていました。

のリリースproject-commonは問題なく行わproject-implれますが、最初のフェーズで失敗し、SNAPSHOT 依存関係がないことを確認します。まあまあ。( project-common1 つしかありません。) をオーバーライドしmaven-release-pluginて SNAPSHOT チェックをスキップすることはできません。親 POM を使用しても、ここでは機能しません。これらは完全に別個のリポジトリであり、場合によっては個別にリリースされるためです。では、Jenkins と Maven Release の快適さを維持しながらこれを行うにはどうすればよいでしょうか?

続けてください: 自分の質問に答えてください - あなたの知識、Q&A スタイルを共有してください.</p>

4

1 に答える 1

1

ログを読んで、Jenkins が次のように Maven を呼び出していることがわかりました。

mvn -B -f /var/lib/hudson/jobs/project-impl/workspace/pom.xml \
    -DdevelopmentVersion=1.5.1.5-SNAPSHOT -DreleaseVersion=1.5.1.4 \
    -Dtag=1.5.1.4 -Dresume=false release:prepare release:perform \
    -DpreparationGoals=clean install -e

-D何かに良いものでなければなりませんよね?シェルのようにできます${project.version:-${releaseVersion}}か、同僚に尋ねました(Umerに感謝します!)、彼はそれは好きではないが、-Dプロパティをオーバーライドすると言いました。

maven-release-plugin はプロジェクト<version>要素のみを更新するため、バージョンをプロパティに配置できませんでした。

ありがたいことに、二重の間接化が機能します。醜いハックであり、誰かが Jenkins を使用してリリースしない場合、または誰かがローカルで使用すると-DreleaseVersion壊れますが、2 つの小さな変更により、これらのプロジェクトがリリース可能になりました。

まず、releaseVersionデフォルトで (動的に更新される)と呼ばれるプロパティを追加し${project.version}ます。

<properties>
    <releaseVersion>${project.version}</releaseVersion>
</properties>

次に、代わりにそれを使用するように依存関係を変更します。

    <dependency>
        <groupId>de.tarent.example</groupId>
        <artifactId>project-common</artifactId>
        <version>${releaseVersion}</version>
    </dependency>

このソリューションで確認できる他の唯一の問題は、何か {one,thing} が Maven リポジトリからリリースされた POM を使用する場合です。これには、この間接性も含まれているためです (リリース時に POM をフィルタリングしません)。しかし、これまでのところうまく機能しています。

必要がある場合は、以前と同じように手動で行をproject-impl変更します( ceteris paribus )。<version>${releaseVersion}</version><version>1.5.1.4</version>

于 2015-04-10T16:30:26.250 に答える