Gretty supports hot deployment: whenever the classes, jars or resources [comprising the web-app] are updated, Gretty automatically reloads web-app.
Gretty version 0.0.18+ automatically recompiles and then reloads your web-app, as soon as source code files have changed.
Gretty version 1.0.0+ reloads the changed .class files "on-the-fly", without web-app restart. This is achieved with the help of springloaded library. By default this feature is turned off, you can activate it by setting managedClassReload=true
.
Gretty version 1.1.5+ serves classes and resources of dependency projects directly from their buildDir, thus avoiding assembly/reload of jar files.
You can configure hot deployment by adjusting the gretty configuration properties:
scanInterval defines scan interval, in seconds. When set to zero, hot deployment is fully disabled.
scanDir defines one or more directories, scanned by hot-deployment. The directory could be a string or instance of java.io.File class, denoting relative (to the project) or absolute path.
onScan adds a closure to be called on hot-deployment scan, i.e. each scanInterval seconds. The function is called unconditionally, regardless of whether hot deployment detects changed files or not.
onScanFilesChanged adds a closure to be called whenever hot-deployment detects that files or folders were changed. The closure receives List<String> as the parameter, which holds full paths to all changed files and folders.
recompileOnSourceChange defines, whether the given web-app should automatically recompile on source change.
reloadOnClassChange defines, whether the given web-app should automatically reload when it’s compiled classes change. Note that setting reloadOnClassChange to false have no effect, if managedClassReload=true. That means: if managedClassReload is enabled, then all classes of all web-apps are live-reloaded, independently of reloadOnClassChange setting in individual web-apps.
reloadOnConfigChange defines, whether the given web-app should automatically reload when configuration files (either in WEB-INF or META-INF) change.
reloadOnLibChange defines, whether the given web-app should automatically reload when library files (either in WEB-INF/lib or in maven dependencies) change.
managedClassReload is boolean (default false). When true, the web-server will reload the changed .class files of the given web-app without web-app restart.
Gretty hot deployment assumes the following defaults:
scanInterval is set to one, that means that Gretty scans for changed files every second.
scanDir includes the following directories:
"${projectDir}/src/main/java"
"${projectDir}/src/main/groovy"
"${projectDir}/src/main/resources"
"${projectDir}/build/classes/main"
"${projectDir}/build/resources/main"
all dependency jars and overlay-WARs, comprising the web-app.
recompileOnSourceChange, reloadOnClassChange, reloadOnConfigChange and reloadOnLibChange are all set to true.
managedClassReload is set to false.
Tip
|
Hot-deployment function normally serves files in "src/main/java" and "src/main/resources", but not in "src/main/webapp". This latter is processed by another function: Fast reload. |
Tip
|
Gretty supports hot deployment only on non-test gradle tasks. Any test tasks (including integration test tasks) run without hot deployment. The generated products also run without hot deployment. |
Important
|
Current implementation of hot deployment does not detect changes in Gradle configuration. That means: whenever you change and save "build.gradle", containing Gretty configuration, you need to restart the web-app "by hand", only then the changes will have effect. |