Grails没有在Config.groovy中翻译类路径

时间:2015-08-29 12:25:07

标签: grails

在grails-app / conf / config.groovy中 我有

    grails.config.locations = [ "classpath:confDev1.groovy",
       "file:${userHome}/confDev2.groovy"]

两个文件都存在。 在我评估时进行调试

grailsApplication.config.grails.config.locations

我得到了

"classpath:confDev1.groovy",
"file:adminLaptop/confDev2.groovy"

grails没有获取类路径文件。好像他没有翻译类路径,只是把它当作String。

正确添加了第二个文件。

如何在classpath中放置配置文件?

1 个答案:

答案 0 :(得分:0)

grails.config.locations = [ 
    "classpath:confDev1.groovy",
    "file:${userHome}/confDev2.groovy"
]

将上面的代码放在grails项目的Config.groovy中意味着有两个配置文件 confDev1.groovy confDev2.groovy 。一个存在于应用程序的类路径中,另一个存在于文件系统路径中。

这并不意味着grails会查看整个文件系统,然后将 confDev1.groovy 放到应用程序的类路径中。

要外化配置,一个好的方法是将外部配置文件放在项目的基本目录中。每当运行app或war creation event触发时,将此文件复制到classpath。

要将文件从基本目录复制到run-app或war-creation事件的类路径,您可以创建自定义脚本。

加入Grails活动

当您指定将从类路径或系统路径加载配置时,您需要连接到Grails事件以确保该文件位于类路径中。在 scripts / _Events.groovy 下创建一个文件,然后粘贴下面给出的代码。

//Hook into war creation event
eventCreateWarStart = { warName, stagingDir ->
  ant.copy(todir: "${stagingDir}/WEB-INF/classes") {
    fileset(file: "${basedir}/confDev2.groovy")
  }
}

//Hook into run-app event
eventRunAppStart = {
  ant.copy(todir:"${basedir}/target/classes") {
    fileset(file: "${basedir}/confDev2.groovy")
  }
}