【问题标题】:Can I use ConfigSlurper to reference a config file in the classpath?我可以使用 ConfigSlurper 来引用类路径中的配置文件吗?
【发布时间】:2011-05-25 15:33:45
【问题描述】:

我想以多种方式使用配置文件的内容,包括在集成测试和我的 BootStrap 中。如果我的配置文件在 src/groovy 下并且名为“com.corp.MyConfig.groovy”,我应该将什么传递给 ConfigSlurper 解析方法?

【问题讨论】:

  • 如果“configFile”为“src/groovy/com/corp/MyConfig.groovy”,config = new ConfigSlurper().parse(new File(configFile).toURI().toURL()) 有效,但我希望有更优雅的东西——尤其是不包含“src/groovy”的表达式。

标签: grails


【解决方案1】:

我猜发生的情况是您的 Groovy 文件被编译并最终成为二进制目录(类路径)中的一个类。不要尝试通过 URL 加载它,而是尝试加载脚本类。

Class scriptClass = getClass().classLoader.loadClass('com.corp.MyConfig')
ConfigObject config = new ConfigSlurper().parse(scriptClass)

【讨论】:

    【解决方案2】:

    如果您的配置文件在类路径中可用,我建议使用 ClassLoader.getResource() 来获取它:

    URL url = MyClass.class.getClassLoader().getResource("com/corp/MyConfig.groovy");
    config = new ConfigSlurper().parse(url);
    

    【讨论】:

    • 这应该在单元测试环境中工作,对吧?我使用单元测试类名作为“MyClass”; 'url' 为空。
    • 嗯,这意味着它无法在类路径中找到您的配置。尝试将资源名称更改为groovy/com/corp/MyConfig.groovy
    • 在路径中添加“groovy”不走运。
    • @jim-norman 你的类路径上有 src 吗?也许您在类路径上有另一个名为 classes 或 bin 的目录。您需要确保您的 config.groovy 存在于类路径上的目录中。
    【解决方案3】:

    您也可以从 POGO 使用:

    import grails.util.Holders
    
    class Foo {
        def bar() {
            println(Holders.config.grails.serverURL)
        }
    }
    

    发件人:How do I get at the goodies in my Grails Config.groovy at runtime?

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 2012-06-26
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      相关资源
      最近更新 更多