jpackage:
As an edit (pointed in comments), javapackager
was removed from JDK in Java-10 and one can look forward to making use of jpackage
as an incubating tool since Java-14.
javapackager
You can use javapackager
tool.
The Java packaging tools provide built-in support for several formats
of self-contained application packages.
The basic package is a single
folder on your hard drive that includes all application resources and
the JRE. The package can be redistributed as is, or you can build an
installable package (for example, EXE or DMG format.)
Though there are certain restrictions associated with building these applications with javapackager
which includes -
Self-contained application packages must be explicitly requested by passing the native argument to the Ant task or javapackager -deploy command.
Self-contained application packages must be built on the operating system on which it is intended to run. Prerequisite tools must be available to build a package in a specific format.
Self-contained application packages can only be built using JDK 7 Update 6 or later. The Java Packager for JDK 9 packages applications with a JDK 9 runtime image. To package a JDK 8 or JDK 7 JRE with your application, use the JDK 8 Java Packager.
One way to create a basic self-contained application is to modify the deploy
ant task:-
<fx:deploy width="${javafx.run.width}" height="${javafx.run.height}"
nativeBundles="all"
outdir="${basedir}/${dist.dir}" outfile="${application.title}">
<fx:application name="${application.title}" mainClass="${javafx.main.class}"/>
<fx:resources>
<fx:fileset dir="${basedir}/${dist.dir}" includes="*.jar"/>
</fx:resources>
<fx:info title="${application.title}" vendor="${application.vendor}"/>
</fx:deploy>
Native packages can be built using the javapackager
command tool. Java Packager Command to Generate Self-Contained Application Packages would be something like -
javapackager -deploy -native -outdir OUTPUT_DIR -outfile APPLICATION_NAME
-srcdir PACKAGE_SRC_DIR -srcfiles APPLICATION.jar -appclass MAIN_CLASS
-name "YourApplication" -title "SelfContained"