【问题标题】:Access sub-project application properties in grails/groovy在 grails/groovy 中访问子项目应用程序属性
【发布时间】:2013-05-02 18:46:13
【问题描述】:

我有一个单身课程

@Singleton
class CustomerBundleSingleton {

    def grailsApplication = Holders.getGrailsApplication()
    String projName
    private CustomerBundleSingleton() {

        line 10: projName = // how to get sub-project name here ???

    }

}

application.properties // my project is running
-----------------------
app.name = MyNewProject


application.properties // located in sub project
-----------------------
app.name = MySubProject

我在"line 10:" 中尝试了grailsApplication.metadata['app.name'],它返回"MyNewProject"。而我想要一种方法来获取位于的UserBundleSingleton 的项目名称(MySubProjectName)。像 grailsApplication.current.metadata['app.name'] ???? .

这样它就可以返回MySubProjectName而不是MyNewProject??

【问题讨论】:

  • “子项目”是指插件?
  • 是的,就是主项目下的插件。
  • stackoverflow.com/questions/9809566/… 试试grails.util.Metadata.current.'app.name'
  • 我的班级中有 grailsApplication,如果我尝试 grailsApplication.util.Metadata.current.'app.name' 会给我“util 不是定义的属性”。如果我使用Holders.getGrailsApplication().metadata.current.'app.name',我将无法在空对象上调用app.name
  • Matadata 是一个类,而不是 grailsApplication 的一个属性。

标签: grails


【解决方案1】:

根据您的要求和“捆绑”,我有 3 条建议。

1) 您没有捆绑标记/描述符

假设您知道子项目(Grails 插件)名称,您的生活会变得更轻松,而不必遍历所有插件...

您可能可以在这些行中使用一些东西。

// Plugin name is 'hibernate' in this example

import org.codehaus.groovy.grails.plugins.PluginManagerHolder

def hibernateVersion = PluginManagerHolder.pluginManager.getGrailsPlugin('hibernate').version

// Loop through all plugins
// PluginManagerHolder.pluginManager.getAllPlugins()

2) 使用自定义插件属性查找感兴趣的插件

其他策略,如果您必须动态查找捆绑包。

在每个插件描述符中创建一个自定义标记属性

def specialProperty = "whatever"

然后在你的 CustomerBundleSingleton 中

PluginManagerHolder.pluginManager.getAllPlugins().each {
     if (it.properties.specialProperty) {
               def subProjectName = it.name
               def subProjectVersion = it.version
     } 
}

3) 自定义捆绑信息解析

您可能还想通过 META-INF/MANIFEST.MF 或类似机制考虑一些元数据。

希望对你有帮助...

【讨论】:

  • 感谢您的快速回复。要从子项目中的 application.properties 中获取属性 app.name 是不是有任何简单的方法来获取它,例如 grailsApplication.util.Metadata.current.'app.name'?当然这条线没有用:(但我认为可能有简单的方法来获得它。我是 grails/groovy 的新蜜蜂。如果没有其他方法,那么我将开始一一尝试你的输入。
  • 我不知道任何其他方式,但也不知道您的确切要求。你可以这样做 grailsApplication.util.Metadata.getInstalledPlugins (grails.org/doc/latest/api/grails/util/…) -> 你仍然需要知道要寻找什么......
猜你喜欢
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多