Aquí hay un ejemplo de edición de archivos de configuración desde scripts/_Install.groovy
.
Mi complemento copia tres archivos en el directorio de destino.
.hgignore
se utiliza para el control de versiones,
DataSource.groovy
sustituye a la versión predeterminada, y
SecurityConfig.groovy
contiene ajustes adicionales.
Prefiero editar los archivos de la aplicación lo menos posible, especialmente porque espero cambiar la configuración de seguridad dentro de unos años. También necesito usar propiedades de un archivo jcc-server-config.properties
que está personalizado para cada servidor de aplicaciones en nuestro sistema.
Copiar los archivos es fácil.
println ('* copying .hgignore ')
ant.copy(file: "${pluginBasedir}/src/samples/.hgignore",
todir: "${basedir}")
println ('* copying SecurityConfig.groovy')
ant.copy(file: "${pluginBasedir}/src/samples/SecurityConfig.groovy",
todir: "${basedir}/grails-app/conf")
println ('* copying DataSource.groovy')
ant.copy(file: "${pluginBasedir}/src/samples/DataSource.groovy",
todir: "${basedir}/grails-app/conf")
La parte difícil es conseguir que Grails recoja el nuevo archivo de configuración. Para hacer esto, tengo que editar la aplicación grails-app/conf/Config.groovy
.Agregaré dos archivos de configuración para encontrar en classpath.
println ('* Adding configuration files to grails.config.locations');
// Add configuration files to grails.config.locations.
def newConfigFiles = ["classpath:jcc-server-config.properties",
"classpath:SecurityConfig.groovy"]
// Get the application's Config.groovy file
def cfg = new File("${basedir}/grails-app/conf/Config.groovy");
def cfgText = cfg.text
def appendedText = new StringWriter()
appendedText.println ""
appendedText.println ("// Added by edu-sunyjcc-addons plugin");
// Slurp the configuration so we can look at grails.config.locations.
def config = new ConfigSlurper().parse(cfg.toURL());
// If it isn't defined, create it as a list.
if (config.grails.config.locations.getClass() == groovy.util.ConfigObject) {
appendedText.println('grails.config.locations = []');
} else {
// Don't add configuration files that are already on the list.
newConfigFiles = newConfigFiles.grep {
!config.grails.config.locations.contains(it)
};
}
// Add each surviving location to the list.
newConfigFiles.each {
// The name will have quotes around it...
appendedText.println "grails.config.locations << \"$it\"";
}
// Write the new configuration code to the end of Config.groovy.
cfg.append(appendedText.toString());
El único problema es la adición de SecurityConfig.groovy
a la ruta de clase. Descubrí que puedes hacerlo creando el siguiente evento en el complemento /scripts/Events.groovy
.
eventCompileEnd = {
ant.copy(todir:classesDirPath) {
fileset(file:"${basedir}/grails-app/conf/SecurityConfig.groovy")
}
}
Ed.
Wow. Una pregunta con 1000 vistas y no un voto por separado ... ¿No vale esto otra insignia? – rdmueller