我想在我的pom.xml中使用我的nsis Windows安装程序中的version字段的值。为此,我使用nsis-maven-plugin生成target/project.nsh
(其中包含相应的PROJECT_VERSION
字段),然后!include
进入setup.nsi
。< / p>
问题在于:假设我的pom project.version
是1.2-SNAPSHOT。 makensis
将失败并显示错误:
[MAKENSIS] Error: invalid VIProductVersion format, should be X.X.X.X
所以我有两个问题:
“-SNAPSHOT”字符串
我可以在设置VIProductVersion
字段之前将其删除,但是当我的版本没有时,我的版本会显示为1.2。
我的版本看起来像X.X,但需要是X.X.X.X
只要我将pom VIProductVersion ${PROJECT_VERSION}.0.0
更改为1.2.1
project.version
)填充字段就会中断
醇>
这有一个好的策略吗?
答案 0 :(得分:1)
我对maven一无所知,但我可以告诉你为什么NSIS会像这样工作。
您可以使用VIAddVersionKey
添加所需的任何字符串(包括“ProductVersion”)。 VIProductVersion
设置win32 / PE版本资源的fixed (VS_FIXEDFILEINFO)部分,这就是为什么它必须包含4个16位数字...
答案 1 :(得分:0)
我遇到了完全相同的问题。
由于我在项目中使用copy-maven-problem,因此我还使用它来使用Groovy代码段进行project.nsh
:
<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插件之前定义了复制插件 - 在准备包阶段生成.nsh
,因此它在处理之前就存在了。