I've been fighting with this for over a day and have read many posts on SO and other places, but I'm still having problems.
I need to include my application icon in a self-contained JavaFX application package. I'm using JDK 1.8.0_45 and its included JavaFX package. I'm using Maven to build the .exe and it all works great except I can't get my icon included.
Here is my pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<prerequisites>
<maven>2.2.1</maven>
</prerequisites>
<groupId>com.mycompany.drm</groupId>
<artifactId>DRMDashboard</artifactId>
<version>2.0</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<javafx.version>8.0.45</javafx.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<!-- copy all dependencies of your app to target folder-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<configuration>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifestEntries>
<JavaFX-Version>${javafx.version}+</JavaFX-Version>
<Main-Class>com.mycompany.client.HelloWorld</Main-Class>
<implementation-version>2.0</implementation-version>
<JavaFX-Application-Class>com.mycompany.client.HelloWorld</JavaFX-Application-Class>
<JavaFX-Class-Path>
<!-- list all your dependencies here-->
</JavaFX-Class-Path>
<!-- The artifactId (name) of the jfxrt.jar ... see dependency system scope-->
<Class-Path>
javafx-${javafx.version}.jar
</Class-Path>
</manifestEntries>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<path id="mypath">
<pathelement path="${maven.plugin.classpath}"/>
<fileset dir="${project.basedir}">
<include name="package/windows/DRMDashboard.ico"/>
</fileset>
</path>
<!-- define the deploy ANT task-->
<taskdef name="jfxdeploy" classname="com.sun.javafx.tools.ant.DeployFXTask"
classpathref="mypath" />
<!-- define the JarSign ANT task-->
<taskdef name="jfxsignjar" classname="com.sun.javafx.tools.ant.FXSignJarTask"
classpathref="maven.plugin.classpath" />
<jfxdeploy outdir="${project.build.directory}/deploy"
outfile="DRMDashboard"
nativeBundles="exe"
verbose="true">
<info title="DRM Dashboard" vendor="My Company, Inc."/>
<application name="DRMDashboard" mainClass="com.mycompany.client.HelloWorld" version="2.0" />
<resources>
<fileset dir="${project.build.directory}" includes="*.jar" />
<!--includes="*.jar" />-->
</resources>
<!-- set your jvm args-->
<platform javafx="${javafx.version}+">
<jvmarg value="-Xms512m" />
<jvmarg value="-Xmx1024m" />
</platform>
<preferences install="false" menu="true" shortcut="true"/>
</jfxdeploy>
<!-- you need to generate a key yourself -->
<jfxsignjar destdir="${project.build.directory}/deploy"
keyStore="c:/Users/me/DRMDashboard.ks" storePass="****" alias="DRMDashboard"
keyPass="****">
<fileset dir="${project.build.directory}/deploy"
includes="*.jar" />
</jfxsignjar>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ant-javafx</artifactId>
<version>${javafx.version}</version>
<systemPath>${java.home}/../lib/ant-javafx.jar</systemPath>
<scope>system</scope>
</dependency>
</dependencies>
</plugin>
</plugins>
<finalName>DRMDashboard</finalName>
</build>
</project>
EDIT 1: Here's a screenshot of my file explorer:
EDIT 2: Here's a screenshot of the expanded target folder:
When I execute the build with the verbose flag, I get these messages:
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:UsersjernstAppDataLocalTempfxbundler8622978628378929412windowsDRMDashboard.ico
Executable File Name: C:UsersjernstAppDataLocalTempfxbundler8622978628378929412imageswin-exe.imageDRMDashboardDRMDashboard.exe
Config files are saved to C:UsersjernstAppDataLocalTempfxbundler8622978628378929412windows. 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)
I've tried using the "Drop In Resources" as described in the Oracle Documentation, but no matter what I try to get the classpath right, it won't recognize my custom icon
EDIT 3:
I used NwDx's suggested approach of using the javapackager instead of the ant task and I've gotten very close to what I need. Now my only problem is that the dialog box icon still uses the generic java coffee cup:
Here's my current POM:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<prerequisites>
<maven>2.2.1</maven>
</prerequisites>
<groupId>com.autoap.drm</groupId>
<artifactId>native_drm</artifactId>
<version>2.0</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<javafx.version>8.0.45</javafx.version>
<mainClass>com.autoap.client.DRMDashboard</mainClass>
<application.title>DRMDashboard</application.title>
<organization.name>AutoAp, Inc.</organization.name>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</art
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…