Oto przykład edytowania plików konfiguracyjnych z scripts/_Install.groovy
.
Moja wtyczka kopiuje trzy pliki do katalogu docelowego.
.hgignore
służy do kontroli wersji,
DataSource.groovy
zastępuje wersję domyślną, a
SecurityConfig.groovy
zawiera dodatkowe ustawienia.
Wolę edytować pliki aplikacji w jak najmniejszym stopniu, szczególnie dlatego, że spodziewam się zmiany konfiguracji zabezpieczeń na kilka lat. Muszę również użyć właściwości z pliku jcc-server-config.properties
, który jest dostosowany do każdego serwera aplikacji w naszym systemie.
Kopiowanie plików jest łatwe.
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")
Najtrudniejszym zadaniem jest pobranie Grailsa do pobrania nowego pliku konfiguracyjnego. Aby to zrobić, muszę edytować aplikację grails-app/conf/Config.groovy
.Dodam dwa pliki konfiguracyjne, które można znaleźć w ścieżce klas.
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());
Jedynym problemem jest dodanie SecurityConfig.groovy
na ścieżce klasy. Odkryłem, że możesz to zrobić, tworząc następujące zdarzenie w wtyczce: /scripts/Events.groovy
.
eventCompileEnd = {
ant.copy(todir:classesDirPath) {
fileset(file:"${basedir}/grails-app/conf/SecurityConfig.groovy")
}
}
Ed.
Wow. Pytanie z 1000 odsłonami, a nie z jednym przegłosowaniem ... Czy to nie jest warte innej odznaki? – rdmueller