Gradle Goodness: Alter Start Scripts from Application Plugin
Join the DZone community and get the full member experience.
Join For FreeFor Java or Groovy projects we can use the application plugin in Gradle to run and package our application. The plugin adds for example thestartScripts
task which creates OS specific scripts to run the project as a JVM application. This task is then used again by the installDist
that installs the application, and distZip
and distTar
tasks that create a distributable archive of the application. The startScripts
tasks has the properties unixScript
and windowsScript
that are the actual OS specific script files to run the application. We can use these properties to change the contents of the files.
In the following sample we add the directory configuration
to the CLASSPATH
definition:
... startScripts { // Support closures to add an additional element to // CLASSPATH definition in the start script files. def configureClasspathVar = { findClasspath, pathSeparator, line -> // Looking for the line that starts with either CLASSPATH= // or set CLASSPATH=, defined by the findClasspath closure argument. line = line.replaceAll(~/^${findClasspath}=.*$/) { original -> // Get original line and append it // with the configuration directory. // Use specified path separator, which is different // for Windows or Unix systems. original += "${pathSeparator}configuration" } } def configureUnixClasspath = configureClasspathVar.curry('CLASSPATH', ':') def configureWindowsClasspath = configureClasspathVar.curry('set CLASSPATH', ';') // The default script content is generated and // with the doLast method we can still alter // the contents before the complete task ends. doLast { // Alter the start script for Unix systems. unixScript.text = unixScript .readLines() .collect(configureUnixClasspath) .join('\n') // Alter the start script for Windows systems. windowsScript.text = windowsScript .readLines() .collect(configureWindowsClasspath) .join('\r\n') } } ...
This post was inspired by the Gradle build file I saw at the Gaiden project.
Written with Gradle 2.3.
Published at DZone with permission of Hubert Klein Ikkink, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Trending
-
Designing a New Framework for Ephemeral Resources
-
What to Pay Attention to as Automation Upends the Developer Experience
-
Reactive Programming
-
Logging Best Practices Revisited [Video]
Comments