我的最终 jar 文件需要在运行时传递给它一个参数。参数是安装目录本身。我不能修改jar文件或任何java代码,只能修改要在jpackage中传递给它的参数。
如果它位于C:pathtojar
我会通过java -jar jarFile.jar "C:pathtojar"
调用 jar 文件,但由于我正在使用--win-dir-chooser
制作 msi 安装程序,安装目录可以是任何东西,所以我不知道该在--arguments
传递什么。
我目前的解决方案涉及一个"中间人"jar文件作为--main-jar
。.exe文件调用"中间人"jar,而中间人又调用带有所需参数的最终jar(通过java代码查找当前目录)。但是,这似乎是不必要的,我想找到一个替代品。
谁能帮我?有没有更好的方法可以做到这一点?任何建议都会有所帮助。
不要依赖当前目录,因为如果您使用快捷方式,这可能是错误的。通常你会使用System.getProperty("jpackage.app-path")
计算出 jpackage 的安装目录。
但是,由于您无法更改 jar 的代码,因此您可以通过在引用特殊jpackage
变量$APPDIR
的启动器中使用参数或arguments
属性将固定命令行参数定义为 jar 的主类--arguments
来实现相同的结果。
$APPDIR
变量的值在启动时展开,因此将由应用程序文件夹的实际安装目录路径填充。有三种方法可以将参数硬连接到生成的 EXE:
-
命令行标志 - 请注意,在 Linux 上,您必须转义值,否则 shell 将从其自己的环境变量中填充$APPDIR:
jpackage ... --arguments $APPDIRrelpathtoyourjar.jar
-
对于参数的配置文件,使用包含以下内容的文件
configfile
jpackage @configfile
:--arguments $APPDIR\relpathto\yourjar.jar
-
对于启动器属性文件,使用包含以下内容的文件
yourappname.properties
jpackage ... --add-launcher yourappname=yourappname.properties
:arguments=$APPDIR\relpathto\yourjar.jar
安装后,启动器定义配置RELEASEDIRappyourappname.cfg
应包含以下内容:
[ArgOptions]
arguments=$APPDIRrelpathtoyourjar.jar
要使上述工作,jar 必须打包到发布结构中的某个地方,例如带有jpackage --input somedir
并且您使用新的主类或--main-jar
来替换包装器 Main - 检查罐子内部MANIFEST.MF
。
请注意,使用任何命令行参数运行 EXE 将替换硬连线参数。