以某种方式可以访问Config.groovy
中BuildConfig.groovy
中指定的属性吗?
我需要在打包过程中复制一些引导文件,目标目录取决于指定的环境。由于我需要在应用程序引导期间访问这些文件,我想在Config.groovy
中定义路径,而不是重复它。
答案 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