Gradle – Multiple start script examples
Few build.gradle
examples to show you how to create multiple start scripts or executable Java application.
1. Single Start Script
1.1 In Gradle, you can use the application plugin to create an executable Java application :
build.gradle
apply plugin: 'application'
mainClassName = "com.mkyong.analyzer.run.threads.MainRunApp"
applicationName = 'mainApp'
applicationDefaultJvmArgs = ["-Xms512m", "-Xmx1024m"]
1.2 Create the executable Java application with gradle distZip
command.
$ gradle :analyzer:distZip
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:startScripts
:distZip
1.3 A zip file will be created in $project/build/distributions/xxx.zip
$project/build/distributions/project.zip
--- mainApp #*nix -> com.mkyong.analyzer.run.threads.MainRunApp
--- mainApp.bat #windows -> com.mkyong.analyzer.run.threads.MainRunApp
P.S Alternatively, try gradle distTar
to create a Tar file.
2. Multiple Start Scripts
2.1 To create multiple start scripts, create a custom CreateStartScripts
type :
build.gradle
apply plugin: 'application'
mainClassName = "com.mkyong.analyzer.run.threads.MainRunApp"
applicationName = 'mainApp'
applicationDefaultJvmArgs = ["-Xms512m", "-Xmx1024m"]
task createExtraRunApp(type: CreateStartScripts) {
mainClassName = "com.mkyong.analyzer.run.UpdateHostingExtraRunApp"
classpath = startScripts.classpath
outputDir = startScripts.outputDir
applicationName = 'hostingExtraApp'
defaultJvmOpts = ["-Xms1024m", "-Xmx2048m"]
}
applicationDistribution.into("bin") {
duplicatesStrategy= DuplicatesStrategy.EXCLUDE
from(createExtraRunApp)
fileMode = 0755
}
2.2 This script will create two executable Java applications :
$project/build/distributions/project.zip
---mainApp -> com.mkyong.analyzer.run.threads.MainRunApp
---mainApp.bat -> com.mkyong.analyzer.run.threads.MainRunApp
---hostingExtraApp -> com.mkyong.analyzer.run.UpdateHostingExtraRunApp
---hostingExtraApp.bat -> com.mkyong.analyzer.run.UpdateHostingExtraRunApp
3. Multiple Start Script – Again
3.1 This build.gradle
is using in my project, it creates three executable Java application :
build.gradle
apply plugin: 'application'
mainClassName = "com.hostingcompass.analyzer.run.threads.HydraRunApp"
applicationName = 'hydra'
applicationDefaultJvmArgs = ["-Dlogback.configurationFile=MY_APP_HOME/logback-hydra.xml",
"-Dconfig=MY_APP_HOME/config.properties",
"-Djava.net.preferIPv4Stack=true", "-Dapp.home=MY_APP_HOME/", "-Xms512m", "-Xmx1024m"]
startScripts {
doLast {
unixScript.text = unixScript.text.replace('MY_APP_HOME', '\$APP_HOME')
windowsScript.text = windowsScript.text.replace('MY_APP_HOME', '%~dp0..')
}
}
task updateHostingExtraRunApp(type: CreateStartScripts) {
mainClassName = "com.hostingcompass.analyzer.run.UpdateHostingExtraRunApp"
classpath = startScripts.classpath
outputDir = startScripts.outputDir
applicationName = 'hostingExtra'
defaultJvmOpts = ["-Dlogback.configurationFile=MY_APP_HOME/logback-hosting-extra.xml",
"-Dconfig=MY_APP_HOME/config.properties", "-Dapp.home=MY_APP_HOME/", "-Xms512m", "-Xmx1024m"]
updateHostingExtraRunApp {
doLast {
unixScript.text = unixScript.text.replace('MY_APP_HOME', '\$APP_HOME')
windowsScript.text = windowsScript.text.replace('MY_APP_HOME', '%~dp0..')
}
}
}
task updateWhoisExtraRunApp(type: CreateStartScripts) {
mainClassName = "com.hostingcompass.analyzer.run.UpdateWhoisExtraRunApp"
classpath = startScripts.classpath
outputDir = startScripts.outputDir
applicationName = 'whoisExtra'
defaultJvmOpts = ["-Dlogback.configurationFile=MY_APP_HOME/logback-whois-extra.xml",
"-Dconfig=MY_APP_HOME/config.properties", "-Dapp.home=MY_APP_HOME/", "-Xms512m", "-Xmx1024m"]
updateWhoisExtraRunApp {
doLast {
unixScript.text = unixScript.text.replace('MY_APP_HOME', '\$APP_HOME')
windowsScript.text = windowsScript.text.replace('MY_APP_HOME', '%~dp0..')
}
}
}
applicationDistribution.into("bin") {
duplicatesStrategy= DuplicatesStrategy.EXCLUDE
from(updateHostingExtraRunApp)
from(updateWhoisExtraRunApp)
fileMode = 0755
}
distZip {
archiveName 'analyzer.zip'
}
3.2 Output
$project/build/distributions/analyzer.zip
---hydra
---hydra.bat
---hostingExtra
---hostingExtra.bat
---whoisExtra
---whoisExtra.bat
Note
Remember to declare the exclude
Remember to declare the exclude
duplicatesStrategy
to avoid duplicate start script.
applicationDistribution.into("bin") {
duplicatesStrategy= DuplicatesStrategy.EXCLUDE
from(updateHostingExtraRunApp)
from(updateWhoisExtraRunApp)
fileMode = 0755
}
Hi. Thank you very much for the post. I tried updating the startScripts but its not working for me . My code is: startScripts {
doLast {
// WARNING: HACK! Set default JVM opts. Needed until we upgrade to Gradle 1.7+
unixScript.text = unixScript.text.replace(
‘DEFAULT_JVM_OPTS=””‘,
“DEFAULT_JVM_OPTS=\”${applicationDefaultJvmArgs.join(‘ ‘)}\””)
// Force the setting of security policy to a point after $APP_HOME has been determined.
unixScript.text = unixScript.text.replace(
‘eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $App’,
‘eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $App “-Djava.security.policy=$APP_HOME/conf/java.policy” “-Djavax.net.ssl.trustStore=$APP_HOME/conf/rmissl.keystore” “-Droot.log.folder=$APP_HOME/log”‘)
}}
However, the script is not getting updated with these properties. Can you help me out on this ?