访问grails / groovy中的子项目应用程序属性

时间:2013-05-02 18:46:13

标签: grails

我有一个单身课

@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

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

这样它可以让我回归MySubProjectName而不是MyNewProject ??

1 个答案:

答案 0 :(得分: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 或类似机制考虑一些元数据。

希望它有所帮助...