In a previous post we learned how to pass Java system properties from the command-line to a Java process defined in a Gradle build file. Because Grails 3 uses Gradle as the build tool we can apply the same mechanism in our Grails application. We need to reconfigure the run
task. This task is of type JavaExec
and we can use the method systemProperties
to assign the system properties we define on the command-line when we invoke the run
task.
We have a simple Grails 3 application with the following controller that tries to access the Java system property sample.message
:
// File: grails-app/controllers/com/mrhaki/grails/SampleController.groovy package com.mrhaki.grails class SampleController { def index() { final String message = System.properties['sample.message'] ?: 'gr8' render "Grails is ${message}!" } }
Next we configure the run
and bootRun
tasks and use System.properties
with the Java system properties from the command-line as argument for the systemProperties
method:
// File: build.gradle ... [run, bootRun].each { runTask -> configure(runTask) { systemProperties System.properties } } ...
Now we can invoke the run
or bootRun
tasks with Gradle:
$ gradle -Dsample.message=cool run
Or we can execute the run-app
command with the grails
command:
grails> run-app -Dsample.message=cool
Written with Grails 3.0.7.