BuildConfig中的访问设置

时间:2011-04-13 19:20:07

标签: grails build config

以某种方式可以访问Config.groovyBuildConfig.groovy中指定的属性吗?

我需要在打包过程中复制一些引导文件,目标目录取决于指定的环境。由于我需要在应用程序引导期间访问这些文件,我想在Config.groovy中定义路径,而不是重复它。

4 个答案:

答案 0 :(得分:3)

如果您在生成WAR文件时说出包装过程,那么我已经能够使用Grails脚本/事件将文件复制到不同的位置。例如,我需要在生成WAR时将一个文件复制到WEB-INF / classes文件夹,因此我在/ scripts文件夹下创建了一个Events.groovy文件,其中包含以下内容:

// 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/")
    }
  }
}

正如您在活动中所看到的,您可以访问环境。

如果这不是你的意思,那就忽略我的回答。

答案 1 :(得分:1)

你可以这样做:

System.getProperty('grails.env')

检索当前环境。

答案 2 :(得分:1)

访问bootstrap.path中定义的Config.groovy等属性的常用方法是

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

我还没有从BuildConfig.groovy尝试此操作,但如果它不起作用,那么我想这是因为Config.groovy在执行BuildConfig.groovy时尚未被读取。在这种情况下,您需要自己阅读。 ConfigurationHolder的实施应该向您展示如何执行此操作。

答案 3 :(得分:1)

我发现的唯一解决方案是自己阅读Config.groovy(如Don所述)。这是我的两线解决方案:

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