by FibreFoX

Gradle plugin for JavaFX

418 Stars 55 Forks Last release: over 3 years ago (8.8.0) Apache License 2.0 234 Commits 11 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Build Status Build status Maven Central


Using javafx-gradle-plugin enhances your build-script with

-power. No more using Apache Ant-calls, because this gradle-plugin wraps all calls and introduces workarounds and fixes for not-yet-fixed JDK-bugs. This gradle-plugin is a convenient-wrapper for the javapackger, so you have to visit the official documentation to know about the requirements on each operating-system.

Using OpenJDK? Please make sure you have OpenJFX installed too, as the required JavaFX-parts are separated.

Using Maven? Not problem, just switch to the github-project of the javafx-maven-plugin.

Why does this gradle-plugin exist?

In the need of some equivalent of the javafx-maven-plugin just for gradle, this project was born. A lot of you might have used the

-plugin from Danno Ferrin, but he decided to not continue that project.


  • Gradle 2.10 and above (works on Gradle 3 too)
  • Java Developer Kit 8 with at least Update 40

OS-specific requirements

  • (Windows) EXE installers: Inno Setup
  • (Windows) MSI installers: WiX (at least version 3.7)
  • (Linux) DEB installers: dpkg-deb
  • (Linux) RPM installers: rpmbuild
  • (Mac) DMG installers: hdiutil
  • (Mac) PKG installers: pkgbuild


Please adjust your parameters accordingly:

buildscript {
    dependencies {
        classpath group: 'de.dynamicfiles.projects.gradle.plugins', name: 'javafx-gradle-plugin', version: '8.8.2'

repositories {


apply plugin: 'java'

repositories { mavenLocal() mavenCentral() }

dependencies{ // this dependency is only required when using UserJvmOptionsService // when using Oracle JDK // compile files("${['java.home']}/../lib/packager.jar") // when using OpenJFX (Ubuntu), please adjust accordingly // compile files("/usr/share/java/openjfx/lib/packager.jar") }

apply plugin: 'javafx-gradle-plugin'

// these values are the examples and defaults // you won't need them all

// configure javafx-gradle-plugin // for all available settings please look at the class "JavaFXGradlePluginExtension" jfx { verbose = true mainClass = "" jfxAppOutputDir = "build/jfx/app" jfxMainAppJarName = "project-jfx.jar" deployDir = "src/main/deploy" useEnvironmentRelativeExecutables = true libFolderName = "lib"

// gradle jfxJar
css2bin = false
preLoader = null // String
updateExistingJar = false
allPermissions = false
manifestAttributes = null // Map<string string>
addPackagerJar = true
copyAdditionalAppResourcesToJar = false
skipCopyingDependencies = false
useLibFolderContentForManifestClasspath = false
fixedManifestClasspath = null

// gradle jfxNative
identifier = null  // String - setting this for windows-bundlers makes it possible to generate upgradeable installers (using same GUID)
vendor = "some serious business corp."
nativeOutputDir = "build/jfx/native"
bundler = "ALL" // set this to some specific, if your don't want all bundlers running, examples "", "jnlp", ...
jvmProperties = null // Map<string string>
jvmArgs = null // List<string>
userJvmArgs = null // Map<string string>
launcherArguments = null // List<string>
nativeReleaseVersion = "1.0"
needShortcut = false
needMenu = false
bundleArguments = [
    // dont bundle JRE (not recommended, but increases build-size/-speed)
    runtime: null
appName = "project" // this is used for files below "src/main/deploy", e.g. "src/main/deploy/package/windows/project.ico"
additionalBundlerResources = null // path to some additional resources for the bundlers when creating application-bundle
additionalAppResources = null // path to some additional resources when creating application-bundle
secondaryLaunchers = [[appName:"somethingDifferent"], [appName:"somethingDifferent2"]]
fileAssociations = null // List<map object>&gt;
noBlobSigning = false // when using bundler "jnlp", you can choose to NOT use blob signing
customBundlers = null // List<string>
failOnError = false
onlyCustomBundlers = false
skipJNLP = false
skipNativeVersionNumberSanitizing = false // anything than numbers or dots are removed
additionalJarsignerParameters = null // List<string>
skipMainClassScanning = false // set to true might increase build-speed

skipNativeLauncherWorkaround124 = false
skipNativeLauncherWorkaround167 = false
skipNativeLauncherWorkaround205 = false
skipJNLPRessourcePathWorkaround182 = false
skipSigningJarFilesJNLP185 = false
skipSizeRecalculationForJNLP185 = false
skipMacBundlerWorkaround = false

// gradle jfxRun
runJavaParameter = null // String
runAppParameter = null // String

// per default the outcome of the gradle "jarTask" will be used, set this to specify otherwise (like proguard-output)
alternativePathToJarFile = null // String

// to disable patching of ant-javafx.jar, set this to false
usePatchedJFXAntLib = true

// making it able to support absolute paths, defaults to "false" for maintaining old behaviour
checkForAbsolutePaths = false

// gradle jfxGenerateKeyStore
keyStore = "src/main/deploy/keystore.jks"
keyStoreAlias = "myalias"
keyStorePassword = "password"
keyPassword = null // will default to keyStorePassword
keyStoreType = "jks"
overwriteKeyStore = false

certDomain = null // required
certOrgUnit = null // defaults to "none"
certOrg = null // required
certState = null // required
certCountry = null // required


Minimal setup of

buildscript {
    dependencies {
        classpath group: 'de.dynamicfiles.projects.gradle.plugins', name: 'javafx-gradle-plugin', version: '8.8.2'
    repositories {


} apply plugin: 'java'

repositories { mavenLocal() mavenCentral() }

apply plugin: 'javafx-gradle-plugin'

jfx { // minimal requirement for jfxJar-task mainClass = 'full.qualified.nameOf.TheMainClass'

// minimal requirement for jfxNative-task
vendor = 'YourName'


Customize Icons

To customize the icons used in a native bundle, you have to provide the icons for the appropriate bundle. The icons must follow the file name convention in order to get picked up.

Tip: Set the

setting to true, to log which files are picked up from your deploy directory.


Icon location:


In macOS you can provide up to three different icons. * .app icon * volume icon * the background of the window, when opening the dmg volume

The icon file name is depended on your

setting of this plugin.

| Type | Filename | | :---------------- |:------------------------- | | .app icon | <appName>.icns | | volume icon | <appName>-volume.icns | | volume background | <appName>-background.png |

The icon sizes should follow the specified sizes.


Icon location:


For Linux you can provide one icon.

The icon file name is depended on your

setting of this plugin.

| Type | Filename | | :---------------- |:--------------- | | application icon | <appName>.png |

Whitespaces in the

will be removed in order to lookup for the icon. For example a name like 'foo Bar' will lookup for a icon like 'fooBar.png'


Icon location:


For Windows you can provide two different icons. * application icon * setup icon - the icon of the installer

| Type | Filename | | :---------------- |:------------------------- | | .exe icon | <appName>.ico | | setup exe icon | <appName>-setup-icon.bmp |

Gradle Tasks

  • gradle jfxJar
    - Create executable JavaFX-jar
  • gradle jfxNative
    - Create native JavaFX-bundle (will run
  • gradle jfxRun
    - Create the JavaFX-jar and runs it like you would do using
    java -jar my-project-jfx.jar
    , adjustable using
  • gradle jfxGenerateKeyStore
    - Create a Java keystore
  • gradle jfxListBundlers
    - List all possible bundlers available on this system, use '--info' parameter for detailed information


When you report a bug and this got worked around, you might be able to have access to some -SNAPSHOT-version, please adjust your buildscript:

buildscript {
    dependencies {
        classpath group: 'de.dynamicfiles.projects.gradle.plugins', name: 'javafx-gradle-plugin', version: '8.8.3-SNAPSHOT'
    repositories {
        maven { url "" }




Please look at the examples-folder to see some projects in action.

Last Release Notes

Version 8.8.2 (09-February-2017)

Bugfixes: * fixed

of secondary launchers not being set correctly (fixes issue #55)

(Not yet) Release(d) Notes

upcoming Version 8.8.3 (???-2017)

nothing changed yet

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.