开发者

Access settings in BuildConfig

Is it somehow possible to access the properties specified in Config.groovy inside the BuildConfig.groovy?

I need to copy some bootstrap files during the packaging process and the target directory depends on the specifie开发者_StackOverflow社区d environment. Since I need to access those file during application bootstrap I'd like to define the path in the Config.groovy and rather not duplicate it.


If when you say the packaging process you mean when generating the WAR file then I've been able to copy files to different places using Grails scripts/events. For example, I needed to copy one file to the WEB-INF/classes folder when generating the WAR so I created an Events.groovy file under the /scripts folder with the following content:

// Copy liquibase changelog.xml to classpath folder
eventWarStart = {warName ->
  if (grailsEnv == "production") {
    println "Copying database migration files to classpath!"
    Ant.copy(toFile: "${classesDirPath}/changelog.xml", filtering: true, overwrite: true) {
      fileset(file: "${basedir}/grails-app/migrations/changelog.xml")
    }
    Ant.copy(toDir: "${classesDirPath}/releases/", filtering: true, overwrite: true) {
      fileset(dir: "${basedir}/grails-app/migrations/releases/")
    }
  }
}

As you can see in the event you can have access to the environment.

If this is not what you meant, then just ignore my answer.


The usual way to access a property such as bootstrap.path defined in Config.groovy is

def bootStrapPath = org.codehaus.groovy.grails.commons.ConfigurationHolder.config.bootstrap.path 

I've haven't tried this from BuildConfig.groovy, but if it doesn't work, then I guess it's because Config.groovy hasn't been read when BuildConfig.groovy is executed. In that case, you'll need to read it yourself. The implementation of ConfigurationHolder should show you how to do this.


You can do this:

System.getProperty('grails.env')

to retrieve the current environment.


The only solution I've found was reading the Config.groovy by myself (as mentioned by Don). Here my two line solution:

def directory = new File(getClass().protectionDomain.codeSource.location.path).parent
def config = new ConfigSlurper(grailsSettings.grailsEnv).parse(new File(directory + File.separator + "Config.groovy").toURI().toURL())

println config.bootstrapPath
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜