Need help with javafx-gradle-plugin?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

422 Stars 59 Forks Apache License 2.0 234 Commits 31 Opened issues


Gradle plugin for JavaFX

Services available


Need anything else?

Contributors list

No Data

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.