1

我有一个单身课程

@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??

4

1 回答 1

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或类似机制考虑一些元数据。

希望能帮助到你...

于 2013-05-02T20:00:00.877 回答