我有一个单身课
@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
??
答案 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 或类似机制考虑一些元数据。
希望它有所帮助...