jpackage 如何将 insatllation 目录本身作为参数传递给 jar 文件?



我的最终 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:

  1. 命令行标志 - 请注意,在 Linux 上,您必须转义值,否则 shell 将从其自己的环境变量中填充$APPDIR:

    jpackage  ... --arguments $APPDIRrelpathtoyourjar.jar
    
  2. 对于参数的配置文件,使用包含以下内容的文件configfilejpackage @configfile

    --arguments $APPDIR\relpathto\yourjar.jar
    
  3. 对于启动器属性文件,使用包含以下内容的文件yourappname.propertiesjpackage ... --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 将替换硬连线参数。

相关内容

  • 没有找到相关文章

最新更新