Ich habe das mitgelieferte Grails-Skript, das ich an einem zufälligen Ort im Internet gefunden habe und es funktioniert ziemlich gut, um Skripte in einem Bootstrapped-Grails-Env zu starten. Das einzige, was es nicht zu tun scheint, ist das Starten meiner conf/*Bootstrap.groovy
Skripte, wie wenn ich Run-App mache.Wie kann ich eine Grails-Umgebung vollständig bootstrappen?
Gibt es eine andere Funktion wie loadApp()
und configureApp()
, die das für mich tun?
import org.codehaus.groovy.grails.support.PersistenceContextInterceptor
Ant.property(environment: "env")
grailsHome = Ant.antProject.properties."env.GRAILS_HOME"
includeTargets << new File("${grailsHome}/scripts/Bootstrap.groovy")
target('default': "Runs scripts in the test/local directory") {
if (!args) { throw new RuntimeException("[fail] This script requires an argument - the script to run.") }
depends(configureProxy, packageApp, classpath)
classLoader = new URLClassLoader([classesDir.toURI().toURL()] as URL[], rootLoader)
Thread.currentThread().setContextClassLoader(classLoader)
loadApp()
configureApp()
def interceptor = null
def beanNames = appCtx.getBeanNamesForType(PersistenceContextInterceptor)
if (beanNames && beanNames.size() == 1) {
interceptor = appCtx.getBean(beanNames[0])
}
try {
interceptor?.init()
new GroovyScriptEngine(Ant.antProject.properties."base.dir", classLoader).run("scripts/${args}.groovy", new Binding(['appCtx':appCtx]))
interceptor?.flush()
} catch (Exception e) {
e.printStackTrace()
interceptor?.clear()
} finally {
interceptor?.destroy()
}
}
yeah .. Sie tun müssen, dass in der gleichen Script in einem Skript ausgeführt wird .. es gewann‘ Ich habe gerade ein Init.groovy hinzugefügt, das alle Bootstrap-Sachen aufrufen kann und ich führe es in derselben Instanz der Skript-Engine aus, in der ich das eigentliche Skript verwende. danke! – danb