parcl icon indicating copy to clipboard operation
parcl copied to clipboard

Gradle plugin for bundling your Java application for distribution on Windows, Mac and Linux

parcl

Build Status

Gradle plugin for bundling your Java application as Windows, Mac and Linux native applications

The plugin can generate the following platform natives:

  • Windows - .exe
  • Mac OS X - .app
  • Linux - .sh script

Future releases may add more native formats.

How to use

Add the following buildscript configuration to the top of your build.gradle

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath group: 'org.mini2Dx', name: 'parcl', version: '1.8.0'
    }
}

Then add the plugin to your project, configuration for your main class and how you want parcl to bundle the application. The following shows the minimum required configuration.

project(":projectName") {
   apply plugin: "java"
   apply plugin: "application"
   apply plugin: "org.mini2Dx.parcl"
   
   ........

   mainClassName = "com.example.MyMainClass"

   parcl {
      exe {
         exeName = "myapplication"
      }
		
      app {
         appName = "My Application"
         icon = "relative/path/to/icon.icns"
         applicationCategory = "public.app-category.adventure-games"
         displayName = 'My Application'
         identifier = 'com.example.my.apple.identifier'
         copyright = 'Copyright 2015 Your Name Here'
      }
		
      linux {
         binName = "myapplication"
      }
   }
}

Note: If your version of Gradle gives an error regarding mainClassName, the following workaround has been reported to resolve it:

project(":projectName") {
   apply plugin: "java"
   apply plugin: "application"
   apply plugin: "org.mini2Dx.parcl"
   
   ........

   project.getConvention().getPlugin(ApplicationPluginConvention.class).setMainClassName("com.example.MyMainClass")

The plugin will add a task called 'bundleNative' to your project. This must be invoked on the platform you wish to bundle the application for, i.e. You must be on Mac OS X to bundle a Mac application.

gradle clean build bundleNative

Depending on your platform, the resulting application bundle will appear in build/windows, build/mac or build/linux.

Tasks

Task Description
bundleNative Generates the native application for the current platform
bundleNativeZip Generates the native application and packages it into a .zip

Advanced Configuration

There are several optional configuration parameters for each platform.

Optional Parameter Description Example
zipName Specifies the name for the outputted zip file zipName = 'my-game-windows.zip'
vmArgs Passes JVM options to the application on launch vmArgs = ["-Xmx1g"]
appArgs Passes application arguments to the application on launch appArgs = ["arg1", "arg2"]
withJre Copies your local JRE and bundles it with the application. The value of $JAVA_HOME must be passed as an argument. withJre("/usr/lib/jvm/java-8-oracle/")

The following example shows all options in use.

mainClassName = "com.example.MyMainClass"

parcl {
  exe {
    vmArgs = ["-Xmx1g"]
    appArgs = ["arg1", "arg2"]
    exeName = "myapplication"
    zipName = 'my-game-windows.zip'
			
    withJre("C:\\Program Files (x86)\\Java\\jdk1.8.0_25\\jre")
  }
		
  app {
    vmArgs = ["-Xmx1g"]
    appArgs = ["arg1", "arg2"]
    appName = "My Application"
    icon = "relative/path/to/icon.icns"
    applicationCategory = "public.app-category.adventure-games"
    displayName = 'My Application'
    identifier = 'com.example.my.apple.identifier'
    copyright = 'Copyright 2015 Your Name Here'
    zipName = 'my-game-mac.zip'

    withJre("/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home")
  }
		
  linux {
    vmArgs = ["-Xmx1g"]
    appArgs = ["arg1", "arg2"]
    binName = "myapplication"
    preferSystemJre = true
    zipName = 'my-game-linux.zip'
			
    withJre("/usr/lib/jvm/java-8-oracle/")
  }
}