0

nsis Windows インストーラーの pom.xml のバージョン フィールドの値を使用したいと考えています。これを行うには、nsis-maven-plugintarget/project.nshを使用して(適切なPROJECT_VERSIONフィールドを含む)を生成し、それ!includeを my setup.nsi.

ここに問題があります: 私の pomproject.versionが 1.2-SNAPSHOT であるとします。makensisエラーで失敗します:

[MAKENSIS] Error: invalid VIProductVersion format, should be X.X.X.X

だから私は2つの問題があります:

  1. 「-SNAPSHOT」文字列

    フィールドを設定する前に切り落とすこともできVIProductVersionますが、実際にはそうではないのに、私のバージョンは 1.2 のように表示されます。

  2. 私のバージョンは XX のように見えますが、XXXX である必要があります

    フィールドに 2 つのゼロ (例: ) をハード パディングすると、pomを 1.2.1VIProductVersion ${PROJECT_VERSION}.0.0に変更するとすぐに壊れます。project.version

これに対する良い戦略はありますか?

4

2 に答える 2

0

私はまったく同じ問題を抱えていました。私は自分のプロジェクトでcopy-maven-problemを使用しているので、それを使用project.nshして Groovy スニペットで歳差処理も行いました。

<resource>
    <targetPath>${project.build.directory}</targetPath>
    <file>${project.build.directory}/installer-header.nsh</file>
    <destFileName>installer-header-processed.nsh</destFileName>
    <!-- groovy extension point -->
    <process>{{ 
            def versionsList = project.version.replaceFirst("-SNAPSHOT", "").tokenize('.')
            while(!(versionsList.size >= 4)){
                versionsList.add('0')
            }
            files[0].append("!define VI_PRODUCT_VERSION \"" + versionsList.join('.') + "\"\n")
        }}</process>
</resource>
<resource>
    <targetPath>${project.build.directory}</targetPath>
    <file>${project.build.directory}/installer-header-processed.nsh</file>
    <destFileName>installer-header.nsh</destFileName>
    <move>true</move>
</resource>

このプラグインのドキュメントを確認し、変数/ファイル名を調整します (つまり、ヘッダー ファイルと呼びますinstaller-header.nsh) 。

VI_PRODUCT_VERSIONこの後、ヘッダーに変数(必要に応じて名前を変更)があり、 setup.nsi.

これは悪いハックのように見えますが、今のところ機能しています。将来、プラグインによって生成される変数があることを願っています..

PS: copy-maven-plugin BEFORE nsis-maven-plugin をパッケージング段階で呼び出して、機能させます。nsis プラグインの前に copy プラグインを定義しました.nsh。これは prepare-package フェーズ内で生成されるため、処理の前に存在します。

于 2014-04-02T15:46:15.697 に答える