在自包含JavaFX应用程序中包含图标
我一直在与这个战斗超过一天,并在SO和其他地方阅读了很多post,但我仍然遇到问题。
我需要在自包含的JavaFX应用程序包中包含我的应用程序图标。 我正在使用JDK 1.8.0_45及其包含的JavaFX包。 我正在使用Maven来构建.exe并且它一切都很好,除了我不能得到我的图标。
这是我的pom.xml:
4.0.0 2.2.1 com.mycompany.drm DRMDashboard 2.0 UTF-8 8.0.45 org.apache.maven.plugins maven-compiler-plugin 3.3 1.8 1.8 org.apache.maven.plugins maven-dependency-plugin 2.10 copy-dependencies package false false true copy-dependencies org.apache.maven.plugins maven-jar-plugin 2.6 ${javafx.version}+ com.mycompany.client.HelloWorld 2.0 com.mycompany.client.HelloWorld javafx-${javafx.version}.jar true org.apache.maven.plugins maven-antrun-plugin 1.6 package run com.oracle ant-javafx ${javafx.version} ${java.home}/../lib/ant-javafx.jar system DRMDashboard
编辑1:这是我的文件浏览器的屏幕截图:
编辑2:这是扩展目标文件夹的屏幕截图:
当我使用verbose标志执行构建时,我收到以下消息:
main: No base JDK. Package will use system JRE. Using default package resource [application icon] (add package/windows/DRMDashboard.ico to the class path to customize) Icon File Name: C:\Users\jernst\AppData\Local\Temp\fxbundler8622978628378929412\windows\DRMDashboard.ico Executable File Name: C:\Users\jernst\AppData\Local\Temp\fxbundler8622978628378929412\images\win-exe.image\DRMDashboard\DRMDashboard.exe Config files are saved to C:\Users\jernst\AppData\Local\Temp\fxbundler8622978628378929412\windows. Use them to customize package. Using default package resource [Inno Setup project file] (add package/windows/DRMDashboard.iss to the class path to customize) Using default package resource [setup dialog icon] (add package/windows/DRMDashboard-setup-icon.bmp to the class path to customize) Using default package resource [script to run after application image is populated] (add package/windows/DRMDashboard-post-image.wsf to the class path to customize)
我已尝试使用Oracle文档中描述的“Drop In Resources”,但无论我尝试将类路径设置为正确,它都无法识别我的自定义图标
编辑3:我使用了NwDx建议的使用javapackager而不是ant任务的方法,我已经非常接近我需要的东西了。 现在我唯一的问题是对话框图标仍然使用通用java咖啡杯:
这是我目前的POM:
4.0.0 2.2.1 com.autoap.drm native_drm 2.0 UTF-8 8.0.45 com.autoap.client.DRMDashboard DRMDashboard AutoAp, Inc. org.apache.maven.plugins maven-compiler-plugin 3.3 1.8 1.8 org.apache.maven.plugins maven-dependency-plugin 2.10 copy-dependencies package false false true copy-dependencies org.apache.maven.plugins maven-jar-plugin 2.6 ${javafx.version}+ com.autoap.client.DRMDashboard 2.0 com.autoap.client.DRMDashboard javafx-${javafx.version}.jar true org.codehaus.mojo exec-maven-plugin 1.4.0 createjar package exec ${java.home}/../bin/javapackager -createjar -nocss2bin -appclass ${mainClass} -srcdir ${project.build.directory}/classes -outdir ${project.build.directory} -outfile ${project.build.finalName}.jar <!-- Can't test, because I don't have the files signjar package exec ${java.home}/../bin/javapackager -signjar -alias ${application.title} -keyPass **** -keyStore C:/Users/me/DRMDashboard.ks -storePass ***** -outdir ${project.build.directory} -srcdir ${project.build.directory} -srcfiles ${project.build.finalName}.jar --> deploy package exec ${java.home}/../bin/javapackager -deploy -appclass ${mainClass} -native exe -srcdir ${project.build.directory} -srcfiles ${project.build.finalName}.jar -outdir ${project.build.directory}/dist -outfile ${project.build.finalName} -Bicon=${project.build.directory}/classes/${application.title}.ico -BappVersion=${project.version} -Bcopyright='2015 AutoAp, Inc.' -BshortcutHint=true -BsystemWide=false -Bwin.menuGroup=${organization.name} -Bvendor=${organization.name} -v default-cli exec ${java.home}/bin/java -jar '${project.build.directory}/${project.build.finalName}.jar' DRMDashboard
使图标显示在标题栏中的是javapackager部署步骤的-Bicon=${project.build.directory}/classes/${application.title}.ico
参数。 该行告诉inno安装程序使用该图标。 拼图的最后一部分是如何使用bmp作为对话框图像。 这是日志文件的相关位:
Running [C:\Program Files\Java\jdk1.8.0_45\jre\bin\java, -version] Running [C:\Program Files (x86)\Inno Setup 5\iscc.exe, /?] Detected [C:\Program Files (x86)\Inno Setup 5\iscc.exe] version [5] Using custom package resource [application icon] (loaded from file C:\Users\jernst\IdeaProjects\AutoAp\native_drm\target\classes\DRMDashboard.ico) Running [C:\Users\jernst\AppData\Local\Temp\iconswap106251599206027586.exe, C:\Users\jernst\AppData\Local\Temp\fxbundler6949394438624826643\windows\DRMDashboard.ico, C:\Users\jernst\AppData\Local\Temp\fxbundler6949394438624826643\images\win-exe.image\DRMDashboard\DRMDashboard.exe] Icon File Name: C:\Users\jernst\AppData\Local\Temp\fxbundler6949394438624826643\windows\DRMDashboard.ico Executable File Name: C:\Users\jernst\AppData\Local\Temp\fxbundler6949394438624826643\images\win-exe.image\DRMDashboard\DRMDashboard.exe Config files are saved to C:\Users\jernst\AppData\Local\Temp\fxbundler6949394438624826643\windows. Use them to customize package. Using default package resource [Inno Setup project file] (add package/windows/DRMDashboard.iss to the class path to customize) Using default package resource [setup dialog icon] (add package/windows/DRMDashboard-setup-icon.bmp to the class path to customize) Using default package resource [script to run after application image is populated] (add package/windows/DRMDashboard-post-image.wsf to the class path to customize) Generating EXE for installer to: C:\Users\jernst\IdeaProjects\AutoAp\native_drm\target\dist\bundles Running [C:\Program Files (x86)\Inno Setup 5\iscc.exe, /oC:\Users\jernst\IdeaProjects\AutoAp\native_drm\target\dist\bundles, C:\Users\jernst\AppData\Local\Temp\fxbundler6949394438624826643\images\win-exe.image\DRMDashboard.iss] in C:\Users\jernst\AppData\Local\Temp\fxbundler6949394438624826643\images\win-exe.image Inno Setup 5 Command-Line Compiler
您可以看到它在哪里找到我的自定义应用程序图标,但它找不到自定义安装对话框图标。
先决条件/假设
- 你在Windows上(7,8,8.1)
- 您至少在1.8.0版本中安装了JDK(包括javafx)
- 您已将JAVA_HOME环境变量设置为指向JDK的顶级目录(例如C:\ Program Files \ Java \ jdk1.8.0_45)
- 至少在5.5.5版本中安装了Inno Setup (首选unicode版本)
- 您已经有一个图标文件(256 x 256px),优先选择多尺寸图标。 我建议访问这个网站: http : //icoconvert.com/
- 您已将安装程序安装程序的bmp文件(48 x 48 px)设置为安装图标
解
项目结构
首先,您需要在一个有效的结构中设置Project,如下所示:您的包文件夹必须位于项目根文件夹中,而不是在src或资源等任何子文件夹中。
的pom.xml
执行正确部署需要更多属性。 正如您在antrun插件部分中所看到的,您需要在调用构建文件之前重新分配ant环境的属性。 属性自动设置为被调用的构建文件。 Normaly Intellij Idea将在项目根目录中为您创建pom.xml。
4.0.0 com.autoap HelloWorld 2.0 jar UTF-8 com.autoap.client.HelloWorld ${project.artifactId} Han Solo Star Wars org.apache.maven.plugins maven-dependency-plugin 2.6 unpack-dependencies package unpack-dependencies system junit,org.mockito,org.hamcrest ${project.build.directory}/classes org.codehaus.mojo exec-maven-plugin 1.2.1 default-cli exec ${java.home}/bin/java -jar '${project.build.directory}/dist/${project.build.finalName}-${project.version}.jar' org.apache.maven.plugins maven-compiler-plugin 3.1 1.8 1.8 maven-antrun-plugin 1.8 package run
build.xml文件
我试图将它与loosley耦合,因此通常不需要更改该文件中的任何内容。 仅当您想要签名或特殊行为等时.build.xml文件应保存在项目根目录中。
包文件夹中的图像
您的包文件夹中的图像需要重命名。 图标文件需要完全(区分大小写),在maven pom中命名为属性application.title。 第二个文件是设置图标,它需要确切的应用程序标题作为第一部分和-setup-icon.bmp最后一部分。 它需要是一个bmp。 上面提到的尺寸。
我的图片看起来像这样:
运行配置
您现在唯一需要的是运行脚本来部署它。 为此,您需要一个特殊的运行配置,如在下一个屏幕中显示:
应用
配置运行后,运行它,您将获得该应用程序。 我的应用程序没有什么特别的默认Hello World示例,它看起来像这样:
exe安装程序的路径
在您的项目中,root是一个文件夹target-> dist-> bundles,在那里您可以获得新的Setup.exe
带图标的安装程序
最后你明白了。
目标结构
目标文件夹包含来自maven运行的无效jar,但无关紧要。 你应该知道,如果你只想通过双击启动jar,你需要在dist文件夹中选择一个。 dist文件夹中的jar是必不可少的,因为创建安装程序的整个过程都依赖于这个jar。 现在您还可以将* .iss文件放在包的Windows文件夹中,以自定义创建过程的更多部分,如许可证文件等。为此,请查看Inno Setup的文档 。
对于已经使用Maven构建jar的人来说,使用javafx-maven-plugin可以轻松构建本机应用程序并包含图标。 (我通过这个答案找到了。)
插件开发人员提供了一个很好的小自动配置脚本 。 我不得不添加
键,但一切顺利。
一旦你有了这个工作,你需要做的就是创建一个正确格式的文件,给它提供与本机应用程序完全相同的名称,并将其放在给定系统的正确文件夹中:
- Windows:在src / main / deploy / package / windows / {appname} .ico中放置一些ICO文件,其中{appname}是应用程序的已配置appname
- Mac OS(X):在src / main / deploy / package / macosx / {appname} .icns中放置一些ICNS文件,其中{appname}是应用程序的配置appname
- Linux:在src / main / deploy / package / linux / {appname} .png中放置一些PNG文件,其中{appname}是应用程序的已配置appname
(上面的文字是从这个问题复制而来的。)
我已经在Windows和Mac上测试了它,它在两种情况下都有效。
你考虑过使用launch4j吗? 我用它来创建我的exe文件,它可以完美地工作,并允许你设置图标。 我用它和izpack一起使用 。