Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails 在BuildConfig中访问设置_Grails_Build_Config - Fatal编程技术网

Grails 在BuildConfig中访问设置

Grails 在BuildConfig中访问设置,grails,build,config,Grails,Build,Config,是否有可能访问BuildConfig.groovy中Config.groovy中指定的属性 我需要在打包过程中复制一些引导文件,目标目录取决于指定的环境。由于我需要在应用程序引导期间访问这些文件,因此我希望在Config.groovy中定义路径,而不是复制路径。您可以这样做: System.getProperty('grails.env') 检索当前环境。访问Config.groovy中定义的属性(如bootstrap.path)的常用方法是 def bootStrapPath = org.c

是否有可能访问
BuildConfig.groovy
Config.groovy
中指定的属性

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

您可以这样做:

System.getProperty('grails.env')

检索当前环境。

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

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

我还没有在
BuildConfig.groovy
中尝试过这一点,但如果它不起作用,那么我猜这是因为执行
BuildConfig.groovy
时没有读取
Config.groovy
。在这种情况下,你需要自己阅读。
ConfigurationHolder
的实现应该向您展示如何做到这一点。

我找到的唯一解决方案是自己阅读
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

如果您说的打包过程是指生成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/")
    }
  }
}
正如您在事件中看到的,您可以访问环境


如果这不是您的意思,那么请忽略我的回答。

谢谢,但这与环境无关(您也可以通过
grailsSettings.grailsEnv
获得)。我想知道如何访问
BuildConfig.groovy
中我在
Config.groovy
中定义的属性(比如
bootstrap.path=resources/bootstrap
)。我发布了一个使用groovys
ConfigSlurper
的解决方案。无论如何,谢谢你。+1感谢你做得很好,没有对构建系统进行黑客攻击。谢谢。我正在使用
grails.war.resources
选项在打包war之前复制文件。我想您的方法的问题是一样的:我需要访问
Events.groovy
脚本中的一个选项,该脚本在
Config.groovy
中定义。如果我错了,请纠正我@罗伯·埃尔斯纳:在我的方法中,“黑客”到底是什么?我正在使用
ConfigSlurper
访问我的配置,以便在
grails.war.resources
闭包中使用它们。请解释你的陈述。