3

私はrpm-maven-pluginで3つのパッケージを構築しています。1つの親、および同じバージョンの親を必要とする2つのプラグイン。バージョンでビルドするまでは、すべて正常に動作しXY-SNAPSHOTます。次に、rpmバージョンが部分的に切り捨てられXYますが、の値${project.version}はXY-SNAPSHOTのままです。プラグインXY-SNAPSHOTは親のバージョンを必要としますが、私はXYバージョンをインストールしました。

「requires」セクションで「truncated」バージョンを使用できるのか、それともプラグインにバージョンを切り捨てないように強制できるのか疑問に思います...

これは私の構成です:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>rpm-maven-plugin</artifactId>
    <version>2.0.1</version>
    <executions>
        <execution>
            <id>parent-package</id>
            <goals>
                <goal>rpm</goal>
            </goals>
            <configuration>
                <name>parent-package</name>
                <mappings>
                    (...)
                </mappings>
            </configuration>
        </execution>
        <execution>
            <id>first-plugin</id>
            <goals>
                <goal>rpm</goal>
            </goals>
            <configuration>
                <name>first-plugin</name>
                <mappings>
                    (...)
                </mappings>
                <requires>
                    <require>parent-package = ${project.version}</require>
                </requires>
            </configuration>
        </execution>
        <execution>
            <id>second-plugin</id>
            <goals>
                <goal>rpm</goal>
            </goals>
            <configuration>
                <name>second-plugin</name>
                <mappings>
                    (...)
                </mappings>
                <requires>
                    <require>parent-package = ${project.version}</require>
                </requires>
            </configuration>
        </execution>
    </executions>
</plugin>
4

2 に答える 2

6

RPM仕様では、-を特殊文字として扱います。これは私がGoogleで見つけることができる最高のものです

The version number is used in version comparisons. The RPM comparison algorithm 
is fairly complex, but can get fooled by strange version numbers. So, your best 
bet is to stick to dotted numerics, such as 1.5 or 2.3.1.1.4 or 1.0. Version 
numbers such as these will compare best from within the RPM system. For example:
    Version: 1.1.2
You cannot use a dash in the version number, as RPM uses the dash to separate 
the Name-Version-Release elements. 

したがって、などのMavenバージョン1.0-SNAPSHOTは有効なRPMバージョン番号ではありません。

MojoのRPMMavenプラグインは、バージョン番号を「支援」するためにいくつかの変換を行います。具体的に-SNAPSHOTは、見つけたとおりに削除し、存在する-SNAPSHOT場合は、rpmリリースをに設定しますSNAPSHOTyyyymmddHHMMSS(リリースは、RPMの同じバージョンの2つの異なるビルドを区別するために使用されることに注意してください)

あなたがする必要があるのは、変換されたバージョンに設定されたいくつかのプロパティを取得することです。これを行うにはいくつかの方法があります。build-helper:regex-propertyコメントで提案したように、プロパティを変換するために使用できます。このアプローチの欠点は、RPMプラグインがバージョン変換に使用するルールを変更した場合、正規表現によって同期が失われる可能性があることです。

正しい解決策は、rpm:version目標を使用してrpm.versionプロパティを設定することです。これにより、構成は次のようになります。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>rpm-maven-plugin</artifactId>
    <version>2.0.1</version>
    <executions>
        <execution>
            <id>properties</id>
            <goals>
                <goal>version</goal>
            </goals>
        </execution>
        <execution>
            <id>parent-package</id>
            <goals>
                <goal>rpm</goal>
            </goals>
            <configuration>
                <name>parent-package</name>
                <mappings>
                    (...)
                </mappings>
            </configuration>
        </execution>
        <execution>
            <id>first-plugin</id>
            <goals>
                <goal>rpm</goal>
            </goals>
            <configuration>
                <name>first-plugin</name>
                <mappings>
                    (...)
                </mappings>
                <requires>
                    <require>parent-package = ${rpm.version}</require>
                </requires>
            </configuration>
        </execution>
        <execution>
            <id>second-plugin</id>
            <goals>
                <goal>rpm</goal>
            </goals>
            <configuration>
                <name>second-plugin</name>
                <mappings>
                    (...)
                </mappings>
                <requires>
                    <require>parent-package = ${rpm.version}</require>
                </requires>
            </configuration>
        </execution>
    </executions>
</plugin>

プロパティに別の名前を付ける必要がある場合は、versionProperty構成パラメーターを使用するだけですが、複数回実行する場合は、おそらくデフォルトのままにしておく必要があることに注意してください。

于 2012-09-18T14:23:07.347 に答える
1

@StephenConnollyの優れた答えを少し拡張するために、Mavenrpmのバージョン管理戦略にはいくつかの特定の違いがあります。違いは主に、Mavenのバージョン修飾子とrpmのビルド(またはリリース)属性に関するものです。

Mavenは、修飾子のないバージョンを、修飾子のないバージョンよりも新しいものとして扱います。Mavenには、SNAPSHOTで終わるすべての修飾子に対する特別な処理もあります。一方、RPMにはビルド番号が必要であり、その値を比較します。当然のことながら、rpmにはSNAPSHOT用の特別なロジックはありません。

私たちはMavenで作業しているので、Mavenのルール/動作に従い、それを機能させるためにrpmで値をマッサージする方法を決定する必要があります。これが意味するのは、Maven修飾子に基づいて以下を達成するために、rpmリリース値をマッサージするためのルールを確立する必要があるということです。

  • 1.0-alpha-1-SNAPSHOT
  • 1.0-alpha-1
  • 1.0-alpha-2
  • 1.0-ベータ-1
  • 1.0-スナップショット
  • 1.0

さらに、rpmの複数のSNAPSHOTビルドで、新しいものを(ビルド日で)識別し、正しくアップグレードできるようにする必要があります。

リリース属性のドキュメントには、この望ましい動作を実現するためのルールが記載されています。

このデフォルトの動作をオーバーライドすることはできますが、同じメタデータ(arch、os、version、release)でビルドされているrpmに同じコンテンツが含まれていることを確認するように注意してください。

于 2015-01-02T15:14:01.990 に答える