/* * Copyright 2004-2005 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import org.codehaus.groovy.grails.plugins.GrailsPluginUtils import org.codehaus.groovy.grails.cli.support.GrailsBuildEventListener /** * Gant script containing the Grails build event system. * * @author Peter Ledbrook * * @since 1.1 */ // No point doing this stuff more than once. if (getBinding().variables.containsKey("_grails_events_called")) return _grails_events_called = true includeTargets << grailsScript("_GrailsClasspath") // Class loader to use for loading events scripts. eventsClassLoader = new GroovyClassLoader(classLoader) // A map of events to lists of handlers. The handlers provided by plugin // and application Events scripts are put in here. eventListener = new GrailsBuildEventListener(eventsClassLoader, binding, grailsSettings) eventListener.globalEventHooks = [ StatusFinal: [ {message -> println message } ], StatusUpdate: [ {message -> println message + ' ...' } ], StatusError: [ {message -> System.err.println message } ], CreatedArtefact: [ {artefactType, artefactName -> println "Created $artefactType for $artefactName" } ] ] hooksLoaded = false binding.addBuildListener(eventListener) // Set up the classpath for the event hooks. classpath() // Now load them. eventListener.classLoader = new GroovyClassLoader(classLoader) eventListener.initialize() // Send a scripting event notification to any and all event hooks in plugins/user scripts event = {String name, def args -> eventListener.triggerEvent(name, * args) } // Give scripts a chance to modify classpath event('SetClasspath', [classLoader])