Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 如何在NSIS中使用字符串替换_Maven_Nsis - Fatal编程技术网

Maven 如何在NSIS中使用字符串替换

Maven 如何在NSIS中使用字符串替换,maven,nsis,Maven,Nsis,我使用maven,我有一个版本为X.Y.Z-SNAPSHOT的maven项目,我使用。因为版本的格式是X.Y.Z-SNAPSHOT,所以我必须删除此后缀,并用0重新对其进行替换 maven插件生成一个project.nsh: !define PROJECT_VERSION "4.23.9-SNAPSHOT" 在my setup.nsi中使用的: !include target\project.nsh Section VersionReplace Push "${PROJECT_VER

我使用maven,我有一个版本为X.Y.Z-SNAPSHOT的maven项目,我使用。因为版本的格式是X.Y.Z-SNAPSHOT,所以我必须删除此后缀,并用0重新对其进行替换

maven插件生成一个project.nsh:

!define PROJECT_VERSION "4.23.9-SNAPSHOT"
在my setup.nsi中使用的:

!include target\project.nsh

Section VersionReplace
    Push "${PROJECT_VERSION}"
    Push "-SNAPSHOT"
    Push "0"
    Call StrRep
    Pop $0

    !define VERSION_SHORT $0
SectionEnd

Name "Installer ${VERSION_SHORT}"

(...)

VIProductVersion ${VERSION_SHORT}
问题:在控制台中,我可以看到:

Name: "Installer $0"
(...)
VIAddVersionKey: "ProductVersion" "$0"
因此,0美元没有被替换我做错了什么?


使用的替换函数:

名称
VIProductVersion
是在编译时创建.exe时考虑的安装程序属性

当传递到节
VersionReplace
时,将在运行时调用
StrRep
函数,更改
名称
VIProductVersion
将为时已晚


顺便说一句:如果您想在运行时定义一些值,比如在
中!定义VERSION\u SHORT$0
语句,使用
Var
语句创建变量并修改变量(使用
StrCpy
)。A
!define
是编译期间定义的不能更改的字符串替换。您实际编写的是
VERSION\u SHORT
$0

的别名,这可以使用在编译时运行的命令来完成

!searchreplace PROJECT_VERSION_SHORT ${PROJECT_VERSION} "-SNAPSHOT" ".0"

感谢您的提示,部分是在运行时执行的。然后我在文档中找到了这些信息。见其他答案。