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

时间:2011-03-05 15:19:15

标签: 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

这似乎有点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

我见过相关帖子herehereherehere,但答案一直没有实现。

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

4 个答案:

答案 0 :(得分:6)

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变量传递。

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

答案 1 :(得分:3)

我们可以在_Events.groovy中添加一个后期编译事件,将我们的外部配置文件复制到类路径中,如下所示:

eventCompileEnd = {
ant.copy(todir:classesDirPath) {
  fileset(file:"${basedir}/grails-app/conf/override.properties")
}}

您可以找到更多详情here

答案 2 :(得分:0)

项目主页中应该有一个名为.classpath的文件 我不确定,但看看那个文件。

答案 3 :(得分:0)

类路径中的

文件夹列在文件.classpath中 默认情况下,grails 2.5.0中包含:

<classpathentry kind="src" path="src/java"/>
<classpathentry kind="src" path="src/groovy"/>
<classpathentry excluding="spring/" kind="src" path="grails-app/conf"/>
<classpathentry kind="src" path="grails-app/conf/spring"/>
<classpathentry kind="src" path="grails-app/controllers"/>
<classpathentry kind="src" path="grails-app/domain"/>
<classpathentry kind="src" path="grails-app/i18n"/>
<classpathentry kind="src" path="grails-app/services"/>
<classpathentry kind="src" path="grails-app/taglib"/>
<classpathentry kind="src" path="grails-app/utils"/>
<classpathentry kind="src" path="grails-app/views"/>
<classpathentry kind="src" path="test/integration"/>
<classpathentry kind="src" path="test/unit"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.grails.ide.eclipse.core.CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/eclipseclasses"/>
grails-app conf中的

文件将被复制到WEB-INF / classes中,并将成为类路径的一部分