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.
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 bundleNativeDepending on your platform, the resulting application bundle will appear in build/windows, build/mac or build/linux.
| Task | Description | 
|---|---|
| bundleNative | Generates the native application for the current platform | 
| bundleNativeZip | Generates the native application and packages it into a .zip | 
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/")
  }
}