grails - 如何扩展用于 'grails run-app' 的类路径

标签 grails configuration classpath sts-springsourcetoolsuite

我的 Config.groovy 文件中有以下内容:

grails.config.locations = [ "classpath:env.groovy" ]

现在,我到底应该将“env.groovy”放在哪里,以便在 grails run-app 期间可以在 CLASSPATH 上使用它?这里的文档非常缺乏。

通过在 $APP_HOME/etc 中放置“env.groovy”然后运行,我可以让它在纯命令行上工作:
$ grails -classpath ./etc run-app

这似乎有点骇人听闻,但我可以忍受它......但是,当我使用 Grails eclipse 插件 (STS) 启动 run-app 时,我无法使任何此类配置工作:
Unable to load specified config location classpath:env.groovy : class path resource [env.groovy] cannot be opened because it does not exist

我看过相关帖子here , here , here , 和 here但答案并不令人满意。

我正在寻找一个基于 CLASSPATH 的解决方案,它将在开发模式(命令行和 eclipse)下与“run-app”一起使用。我知道如何为我的部署 servlet 容器设置 CLASSPATH,所以这不是问题。

最佳答案

Eric,我们这样做的方法是指定一个带有配置文件位置的 Java 系统属性,然后我们在 Config.groovy 上获取它,如下所示:

if (System.properties["application.config.location"]) {
  grails.config.locations = [
          "file:" + System.properties["application.config.location"] + "${appName}-config.groovy"
  ]
}

正如你所看到的,我们只设置了文件所在的文件夹在 Java 系统属性中,按照惯例,我们说文件名应该是应用程序名称+“-config.groovy”,但如果你需要,你可以指定整个路径,包括系统属性中的文件名。

然后在运行应用程序时,您只需像这样设置变量:
grails -Dapplication.config.location=/Users/eric/ run-app

正如您在代码中看到的,如果尚未定义 Java 系统属性变量,则有一个 if 语句可防止您查找配置文件,这样您就可以在不使用外部配置文件的情况下运行您的应用程序,而只需使用Config.groovy 中定义的配置设置。

如果您在 Eclipse 或 IntelliJ 中运行您的应用程序,则将此变量作为 JVM 变量传递。

这是与必须更改类路径或在类路径中包含配置文件以便应用程序选择它不同的选项。

关于grails - 如何扩展用于 'grails run-app' 的类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5204675/

相关文章:

hibernate - 在 session 中存储 Grails/GORM 域对象 - 为什么不呢?

grails - Grails本地化,数字输入

linux - 如何处理DISPLAY=:0. 0

configuration - 设置 tomcat + ssl 失败。无法连接到 SSL channel ?

grails 输入标签 : placeholder not shown if value is a whitespace

java - Tomcat JNDI PSQLException : This connection has been closed

git - 为什么 Git 不从命令行覆盖我的 merge.ff 设置?

java - 在 javac (JDK 9) 中混合 --class-path 和 --module-path

java - 类路径声明中的点

java - 设置 Java CLASSPATH 不起作用,但 -cp 起作用