How do I add default JVM arguments with Gradle

Jhonny007 picture Jhonny007 · Feb 6, 2016 · Viewed 56.7k times · Source

I need to add default JVM options to my jar, when build with Gradle. From the documentation I got that I have to set:

applicationDefaultJvmArgs = ["-Djavafx.embed.singleThread=true"]

I have not much experience with Gradle and the developer that wrote the build.gradle file wrote it different from what most websites give as examples.

Here is the build.gradle:

apply plugin: 'java'
apply plugin: 'eclipse'

version = '0.1'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.+'
    compile 'placeholder'
}

task release(type: Jar) {
    manifest {
        attributes("Implementation-Title": "placeholder",
                "Implementation-Version": version,
                'Main-Class': 'placeholder.Application')
    }
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }

    with jar
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.2.1'
}

I don't know where to put the arguments. I tried putting them in different locations, but I always get:

A problem occurred evaluating root project 'placeholder'.
> No such property: applicationDefaultJvmArgs for class: org.gradle.api.tasks.bundling.Jar_Decorated

Much Thanks, Jhonny

Answer

portenez picture portenez · Feb 7, 2016

From the top of my head I can think of 2 options:

Option1: Do what @Ethan said, it'll likely work:

package placeholder;

//your imports

public class Application{
  static {
      System.getProperties().set("javafx.embed.singleThread", "true");  
  }
  // your code
  public static void main(String... args){
    //your code
  }
}

Option 2: Use the application plugin + default jvm values

build.gradle:

apply plugin: 'application'
//your code
applicationDefaultJvmArgs = ["-Djavafx.embed.singleThread=true"]

Now you can run your code 2 ways:

From gradle

$gradle run

From distribution(script). from the generated script that the application plugin will provide:

$gradle clean build distZip

Then gradle will generate a zip file somewhere under ${your.projectdir}/build. Find the zip then unzip it and under /bin you'll find a ${yourproject}.bat and ${yourproject} executables. One is for Linux/mac/unix (${yourproject}) the other one is for windows (${yourproject.bat})

Option 3 (Android Developer): Use gradle.properties to set jvm argument

# Project-wide Gradle settings.

# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.

# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx1024m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 

# You can setup or customize it according to your needs and combined with the above default value.
org.gradle.jvmargs=-Djavafx.embed.singleThread=true

For more info on how to use gradle build environment on docs.gradle.org