Java 打包工具:自定义安装位置
Java Packager Tool : custom install location
我正在使用 Java Packager Tool 解决 "Self-Contained Application" 代问题。默认情况下,'.exe' 包安装在 "C:\Program Files (x86)" 下,但我想将它安装到自定义位置:例如 "C:\MyApp"。
为了生成我的包,我在 Maven 构建中使用 Ant 任务:
<target xmlns:fx="javafx:com.sun.javafx.tools.ant">
<property name="jre.dir" value="${env.JAVA_HOME}/jre" />
<property name="version" value="0.0.3" />
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant" classpath="${env.JAVA_HOME}/lib/ant-javafx.jar" />
<echo message="// ----------------------------------- //" />
<echo message="// START JAVAPACKAGER ANT TASK //" />
<echo message="// ----------------------------------- //" />
<fx:deploy nativeBundles="exe" outdir="${basedir}/packager"
outfile="MyApp_${version}">
<fx:application name="MyApp" mainClass="com.myfirm.myapp.bootstrap.BootstrapMain">
<fx:argument>-bundlesDir=./bundles/</fx:argument>
</fx:application>
<fx:resources>
<fx:fileset dir="${project.basedir}/target"
includes="${project.name}-${project.version}-jar-with-dependencies.jar" />
<fx:fileset dir="${project.basedir}" includes="bundles/*.jar" />
</fx:resources>
<fx:info title="MyApp ${version}" vendor="MyFirm">
<fx:icon href="${project.basedir}/myapp.ico" kind="default" width="32" height="32" depth="8" />
</fx:info>
<fx:preferences install="true" shortcut="true" />
<fx:platform basedir="${jre.dir}"/>
</fx:deploy>
</target>
有人解决这个问题吗?并且可以告诉我更多有关如何更精确地配置生成的本机包的信息吗?
提前致谢。
编辑
在 Windows 下,我找到了一种方法:通过编辑 jar %JAVA_HOME% 中的文件 com\oracle\tools\packager\windows\template.iss \lib\ant-javafx.jar。但是这个解决方案似乎很难看而且不便携!所以我现在正在寻找一种在我的 ant 任务中覆盖它的方法...
对于额外的文档,Tib Us 所做的是编辑 %JAVA_HOME%\lib\ant-javafx.jar。您可以使用 7-Zip(或其他)打开该 jar 文件并更新其内容。
在 com\oracle\tools\packager\windows\template.iss 中,更改此行:
DefaultDirName=APPLICATION_INSTALL_ROOT\APPLICATION_NAME
收件人:
DefaultDirName={pf}\APPLICATION_NAME
{pf}
是指向 32 位或 64 位 Program Files 文件夹的 Inno Setup 常量。参见 Inno Setup Help。
如果您想在 Program Files 中安装,那么更改会很有帮助:
PrivilegesRequired=APPLICATION_INSTALL_PRIVILEGE
收件人:
PrivilegesRequired=admin
此外,如果您的程序将由非管理员用户使用并且将写入程序文件中的文件夹,那么您需要一些 special folder permissions. Here is some background on permissions 用于应用程序 运行在程序文件中。
您可能还想添加这个,以确保使用新的安装位置:
UsePreviousAppDir=No
这个解决方案并不理想,但总比没有好。
从 jar 文件中获取模板很好——或者 download it here——但是你不需要在原处编辑它。
获得该模板后,您可以将其用作 drop-in resource. All the variables that look like SOME_VARIABLE
, that is, upper case and which use underscores, will still be replaced by the javapackager。
此解决方案更便携,因为它不涉及编辑 JDK;只需将您的模板作为 YourAppName.iss
.
包含在 package/windows/
中
用户选项 -BinstalldirChooser=true
我正在使用 Java Packager Tool 解决 "Self-Contained Application" 代问题。默认情况下,'.exe' 包安装在 "C:\Program Files (x86)" 下,但我想将它安装到自定义位置:例如 "C:\MyApp"。
为了生成我的包,我在 Maven 构建中使用 Ant 任务:
<target xmlns:fx="javafx:com.sun.javafx.tools.ant">
<property name="jre.dir" value="${env.JAVA_HOME}/jre" />
<property name="version" value="0.0.3" />
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant" classpath="${env.JAVA_HOME}/lib/ant-javafx.jar" />
<echo message="// ----------------------------------- //" />
<echo message="// START JAVAPACKAGER ANT TASK //" />
<echo message="// ----------------------------------- //" />
<fx:deploy nativeBundles="exe" outdir="${basedir}/packager"
outfile="MyApp_${version}">
<fx:application name="MyApp" mainClass="com.myfirm.myapp.bootstrap.BootstrapMain">
<fx:argument>-bundlesDir=./bundles/</fx:argument>
</fx:application>
<fx:resources>
<fx:fileset dir="${project.basedir}/target"
includes="${project.name}-${project.version}-jar-with-dependencies.jar" />
<fx:fileset dir="${project.basedir}" includes="bundles/*.jar" />
</fx:resources>
<fx:info title="MyApp ${version}" vendor="MyFirm">
<fx:icon href="${project.basedir}/myapp.ico" kind="default" width="32" height="32" depth="8" />
</fx:info>
<fx:preferences install="true" shortcut="true" />
<fx:platform basedir="${jre.dir}"/>
</fx:deploy>
</target>
有人解决这个问题吗?并且可以告诉我更多有关如何更精确地配置生成的本机包的信息吗?
提前致谢。
编辑
在 Windows 下,我找到了一种方法:通过编辑 jar %JAVA_HOME% 中的文件 com\oracle\tools\packager\windows\template.iss \lib\ant-javafx.jar。但是这个解决方案似乎很难看而且不便携!所以我现在正在寻找一种在我的 ant 任务中覆盖它的方法...
对于额外的文档,Tib Us 所做的是编辑 %JAVA_HOME%\lib\ant-javafx.jar。您可以使用 7-Zip(或其他)打开该 jar 文件并更新其内容。
在 com\oracle\tools\packager\windows\template.iss 中,更改此行:
DefaultDirName=APPLICATION_INSTALL_ROOT\APPLICATION_NAME
收件人:
DefaultDirName={pf}\APPLICATION_NAME
{pf}
是指向 32 位或 64 位 Program Files 文件夹的 Inno Setup 常量。参见 Inno Setup Help。
如果您想在 Program Files 中安装,那么更改会很有帮助:
PrivilegesRequired=APPLICATION_INSTALL_PRIVILEGE
收件人:
PrivilegesRequired=admin
此外,如果您的程序将由非管理员用户使用并且将写入程序文件中的文件夹,那么您需要一些 special folder permissions. Here is some background on permissions 用于应用程序 运行在程序文件中。
您可能还想添加这个,以确保使用新的安装位置:
UsePreviousAppDir=No
这个解决方案并不理想,但总比没有好。
从 jar 文件中获取模板很好——或者 download it here——但是你不需要在原处编辑它。
获得该模板后,您可以将其用作 drop-in resource. All the variables that look like SOME_VARIABLE
, that is, upper case and which use underscores, will still be replaced by the javapackager。
此解决方案更便携,因为它不涉及编辑 JDK;只需将您的模板作为 YourAppName.iss
.
package/windows/
中
用户选项 -BinstalldirChooser=true