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

Eri*_*ric 13 configuration grails classpath sts-springsourcetoolsuite

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

grails.config.locations = [ "classpath:env.groovy" ]
Run Code Online (Sandbox Code Playgroud)

现在,我应该在哪里放置"env.groovy",以便在grails run-app中可以在CLASSPATH上使用它?这里的文档非常缺乏.

我可以通过在$ APP_HOME/etc中放置"env.groovy"然后运行来让它在纯命令行上工作:

$ grails -classpath ./etc run-app
Run Code Online (Sandbox Code Playgroud)

这似乎有点hackish,但我可以忍受它...但是,当我使用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
Run Code Online (Sandbox Code Playgroud)

我在这里,这里,这里这里看过相关的帖子,但答案却一直没有实现.

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

Mar*_*cel 6

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

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

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

然后在运行应用程序时,您只需将变量设置为:

grails -Dapplication.config.location=/Users/eric/ run-app
Run Code Online (Sandbox Code Playgroud)

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

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

这是一个不同的选择,因为必须更改类路径或在类路径中包含配置文件,以便应用程序选择它.