Upload
skills-matter
View
1.205
Download
0
Embed Size (px)
Citation preview
Inside Grails: The Build System& Plugin Management
byPeter Ledbrook
Starting The Grails Build System
grails grailsdebug
startGrails
GrailsStarter
GrailsScriptRunner
Gant
Ant task Maven plugin
GrailsBuildHelper
BuildSettings
Starting The Grails Build System
grails grailsdebug
startGrails
GrailsStarter
GrailsScriptRunner
Gant
Ant task Maven plugin
GrailsBuildHelper
BuildSettings
Shell scripts
startGrails launches VM
Adds groovy-all & grails-bootstrap to system classpath
Starting The Grails Build System
grails grailsdebug
startGrails
GrailsStarter
GrailsScriptRunner
Gant
Ant task Maven plugin
GrailsBuildHelper
BuildSettings
Create GrailsRootLoader
Load classpath from groovy-starter.conf
Load GrailsScriptRunner in GRL and execute
Class loader isolation
Starting The Grails Build System
grails grailsdebug
startGrails
GrailsStarter
GrailsScriptRunner
Gant
Ant task Maven plugin
GrailsBuildHelper
BuildSettings
Create BuildSettings if it doesn't exist
Populate root loader
Initialise Gant
Pre-populate Gant binding
Interactive mode
Starting The Grails Build System
grails grailsdebug
startGrails
GrailsStarter
GrailsScriptRunner
Gant
Ant task Maven plugin
GrailsBuildHelper
BuildSettings
Parse & run Grails scripts
Starting The Grails Build System
grails grailsdebug
startGrails
GrailsStarter
GrailsScriptRunner
Gant
Ant task Maven plugin
GrailsBuildHelper
BuildSettings
Load Grails using given class loader
Isolate Grails from parent class loader
Starting The Grails Build System
grails grailsdebug
startGrails
GrailsStarter
GrailsScriptRunner
Gant
Ant task Maven plugin
GrailsBuildHelper
BuildSettings
Project structure
BuildConfig.groovy & settings.groovy
Dependencies
Class loader hell?
System loader
GrailsRootLoader
URLClassLoader
System loader
GrailsClassLoader
“rootLoader”
“classLoader”
grailsApp.classLoader
Script cacheResourcesJARs (application & plugins)
Script cacheClasses
Artifacts (*.groovy)
Context Class Loader
Starts as root loader (GrailsStarter)
Becomes ”classLoader” (GrailsScriptRunner)
”classes” directory
Ends as Grails application class loader (DefaultGrailsApplication)
Grails Scripts
_GrailsSettings _GrailsClasspath _GrailsEvents
_GrailsBootstrap _GrailsRun _GrailsWar
Common
End use
Grails Scripts
_GrailsSettings _GrailsClasspath _GrailsEvents
_GrailsBootstrap _GrailsRun _GrailsWar
Common
End use
General settings
Create PluginBuildSettings
Configure environment
getPropertyValue()
Grails Scripts
_GrailsSettings _GrailsClasspath _GrailsEvents
_GrailsBootstrap _GrailsRun _GrailsWar
Common
End use
Set up common/compile/test/runtime classpaths
Target classpath
grails.*.classpath Ant paths
Grails Scripts
_GrailsSettings _GrailsClasspath _GrailsEvents
_GrailsBootstrap _GrailsRun _GrailsWar
Common
End use
Install Ant build listener
Load event scripts (_Events.groovy)
Add event() method
Grails Scripts
_GrailsSettings _GrailsClasspath _GrailsEvents
_GrailsBootstrap _GrailsRun _GrailsWar
Common
End use
Grails app without servlet container
Create application context, with
GrailsApplication
GrailsPluginManager
Used by integration tests, generate scripts, and others
Grails Scripts
_GrailsSettings _GrailsClasspath _GrailsEvents
_GrailsBootstrap _GrailsRun _GrailsWar
Common
End use
Grails app with servlet container
Should use runtime classpath
Plugin change scanner
Grails Scripts
_GrailsSettings _GrailsClasspath _GrailsEvents
_GrailsBootstrap _GrailsRun _GrailsWar
Common
End use
Create WAR
Package runtime dependencies
Plugins
Build
Manage plugin installations
Plugin dependencies
Scripts
Lib dependencies
Repositories
Runtime
Load plugins
Add Spring beans
Add dynamic methods
Web descriptor
Plugins in the Build
Scripts
_PluginDependencies _GrailsPlugins _GrailsPluginDev
Classes
PluginBuildSettings PluginInfoGrailsPluginUtils
Files
plugin.xml dependencies.groovy
Plugins at Runtime
*GrailsPlugin
GrailsPluginManager
AbstractGrailsPluginManager
DefaultGrailsPluginManager
GrailsPlugin
AbstractGrailsPlugin
DefaultGrailsPlugin
*GrailsPlugin*GrailsPluginPlugin descriptors
Overlap
_PluginDependencies: target ”loadPlugins”
Called by bootstrap, package app
Required to generate web.xml
Creates temporary GrailsApplication and GrailsPluginManager instances
Plugins may be loaded twice or more!