在自包含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或资源等任何子文件夹中。

ProjectStructur

的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。 上面提到的尺寸。

IconNaming

我的图片看起来像这样:

IconFiles

运行配置

您现在唯一需要的是运行脚本来部署它。 为此,您需要一个特殊的运行配置,如在下一个屏幕中显示:

RunConfig

应用

配置运行后,运行它,您将获得该应用程序。 我的应用程序没有什么特别的默认Hello World示例,它看起来像这样:

应用

exe安装程序的路径

在您的项目中,root是一个文件夹target-> dist-> bundles,在那里您可以获得新的Setup.exe

PathToExe

带图标的安装程序

最后你明白了。

安装程序

目标结构

目标文件夹包含来自maven运行的无效jar,但无关紧要。 你应该知道,如果你只想通过双击启动jar,你需要在dist文件夹中选择一个。 dist文件夹中的jar是必不可少的,因为创建安装程序的整个过程都依赖于这个jar。 现在您还可以将* .iss文件放在包的Windows文件夹中,以自定义创建过程的更多部分,如许可证文件等。为此,请查看Inno Setup的文档 。

TargetStructure

对于已经使用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一起使用 。