Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I add default JVM arguments with Gradle

Tags:

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

like image 679
Jhonny007 Avatar asked Feb 06 '16 18:02

Jhonny007


People also ask

How do you pass JVM arguments in Gradle?

Try to use ./gradlew -Dorg. gradle. jvmargs=-Xmx16g wrapper , pay attention on -D , this marks the property to be passed to gradle and jvm. Using -P a property is passed as gradle project property.

How do I change the default JVM argument?

Yes, right click the project. Click Run as then Run Configurations . You can change the parameters passed to the JVM in the Arguments tab in the VM Arguments box. That configuration can then be used as the default when running the project.

How do I set Gradle VM options?

Add VM options for the Gradle project You can specify VM options for your Gradle project using the gradle. properties file. Create or open your Gradle project. In the Project tool window, right-click the project and from the context menu, select New | File.


2 Answers

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

like image 64
portenez Avatar answered Oct 11 '22 20:10

portenez


applicationDefaultJvmArgs is provided by the Application plugin. So if you apply that plugin, the error would probably go away, and you should be able to execute the program by issuing gradle run once you set the mainClassName property to the fully qualified class name, the main method of which you want to invoke.

like image 37
KKishore Avatar answered Oct 11 '22 19:10

KKishore