Grails 2.3.x:如何在运行插件时获取插件名称?

时间:2014-03-20 01:55:15

标签: grails grails-plugin

在我的Grails 2.3.5 插件描述符文件中,我试图获取插件名称或应用名称,具体取决于它是作为普通Grails应用程序运行还是插件是独自经营。后者我遇到了麻烦。

我在doWithSpring关闭内尝试了以下内容:

application.metadata.getApplicationName()
application.metadata['app.name']
appName
application.config.appName
this.plugin.name

所有这些都是null或空Map。

我有一种感觉,我必须以某种方式访问​​当前的GrailsPluginGrailsPluginUtils,但我还没有取得任何进展。

2 个答案:

答案 0 :(得分:1)

您可以尝试在插件描述符中使用它。

import grails.util.Holders

....

def doWithSpring = {
    //gives plugin name while using through app
    def appName = manager.getGrailsPluginForClassName(this.class.simpleName).name

    //gives plugin project name
    def name = Holders.config.grails.plugin.myplugin.name
}

Config.groovy

的变化
grails.plugin.myplugin.name=appName

当通过应用程序使用插件时,此配置条目不应该被污染。当插件通过应用程序运行时,您将获得上面name的空地图。

答案 1 :(得分:0)

@dmahapatro的回答让我达到了预期的结果,所以我将他的答案标记为正确。

但我遇到的根本问题实际上是由于application.properties - app.name中缺少属性。所以我从评论中提取了相关信息,并将它们放在这个答案中以供将来参考。

我使用Burt Beckwith在Converting Grails Applications to Plugins and vice versa上的非常有用的指示将Grails应用转换为插件。在其中他建议:

  

删除除application.properties之外的所有内容   app.grails.version属性

这就是为什么我application.metadata.getApplicationName()的原始尝试返回null的原因。

app.name添加回application.properties,修正此问题,以便application.metadata.getApplicationName()为我提供所需的价值。

其他人在博客的评论中指出了这个遗漏,但是Burt没有更新他的文章或回复评论,所以我不能断然说你应该为每个插件添加app.name,只是它适用于在这种情况下我(YMMV)。