https://github.com/mini2dx/parcl
Gradle plugin for bundling your Java application for distribution on Windows, Mac and Linux
https://github.com/mini2dx/parcl
app bundle executable gradle gradle-plugin java-application native
Last synced: 5 days ago
JSON representation
Gradle plugin for bundling your Java application for distribution on Windows, Mac and Linux
- Host: GitHub
- URL: https://github.com/mini2dx/parcl
- Owner: mini2Dx
- License: mit
- Created: 2014-12-31T21:33:36.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2021-11-03T16:47:23.000Z (about 4 years ago)
- Last Synced: 2025-04-06T07:36:28.247Z (9 months ago)
- Topics: app, bundle, executable, gradle, gradle-plugin, java-application, native
- Language: Groovy
- Homepage:
- Size: 565 KB
- Stars: 60
- Watchers: 2
- Forks: 15
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
parcl
==========
[](https://travis-ci.org/mini2Dx/parcl)
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
```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.
```gradle
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:
```gradle
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.
```bash
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.
```gradle
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/")
}
}
```