// General buildfile for the project in that's root this file is located. // Obeys the environment variable 'GRAILS_HOME'. // Adapt build.properties to you personal needs. // Start with argument 'test' to only run the tests without build/deploy/restart ant = new AntBuilder() ant.property(file: 'build.properties') ant.property(environment: 'env') props = ant.antProject.properties grailsHome = initGrailsHome() if (args.toList().contains('test')){ startTests() return } /* withJetty { startTests() } */ warApplication() deploy() withServer { startTests() } // method implementations --------------------------------- String initGrailsHome () { def grailsHome = props.grailsHome if (! grailsHome) { grailsHome = props.'env.GRAILS_HOME' } println "grailsHome is <$grailsHome>" return grailsHome } def startTests(){ new BooksTest(grailsHome:grailsHome, props:ant.antProject.properties).runTests() } // call the general 'war' target and 'init' only if needed String warApplication () { buildFile = grailsHome + '/src/grails/build.xml' if ( ! new java.io.File('tmp').exists()) { ant.ant(antfile: buildFile, target:'init') } ant.ant(antfile:buildFile, target:'war') return grailsHome } def deploy () { targetDir = "$props.serverDir/$props.serverWebappDir" ant.copy(file:'grails-app.war', todir: targetDir) } def withServer (Closure yield) { if (props.serverDir =~ /\b5./) { withTomcat5(yield) return } withUnknownServer(yield) } def unknownServer (String command, boolean doPrint) { def filename = 'server-out.txt' ant.exec(dir: props.serverDir, executable: props.executable, output: filename, searchpath: true ){ arg(line: command) } if (doPrint) println new java.io.File(filename).text } def withUnknownServer (Closure yield) { unknownServer(props.serverStopCommand, false) Thread.start { unknownServer(props.serverStartCommand, true) } sleep 10 // wait for server startup yield() unknownServer(props.serverStopCommand, true) } def tomcat (String command) { ant.ant(antfile:grailsHome + '/tomcat.xml', target:command){ property(name:'build', value:'./') property(name:'username', value:props.serverAdminUsername) property(name:'password', value:props.serverAdminPassword) } } def withTomcat5 (Closure yield) { ant.echo(message:'*** tomcat is assumed to be running') try { tomcat('undeploy') } catch (Exception mayNotYetBeThere){} tomcat('deploy') ant.echo(message:'tomcat deployment done') yield() } def withJetty (Closure yield) { def server = new org.mortbay.jetty.Server() def listener = new org.mortbay.http.SocketListener() listener.setPort(8080); server.addListener(listener) server.addWebApplication("/.","books.war") server.start() Thread.start { yield() } server.stop() }