在我的Grails 2.3.5 插件描述符文件中,我试图获取插件名称或应用名称,具体取决于它是作为普通Grails应用程序运行还是插件是独自经营。后者我遇到了麻烦。
我在doWithSpring
关闭内尝试了以下内容:
application.metadata.getApplicationName()
application.metadata['app.name']
appName
application.config.appName
this.plugin.name
所有这些都是null或空Map。
我有一种感觉,我必须以某种方式访问当前的GrailsPlugin
或GrailsPluginUtils
,但我还没有取得任何进展。
答案 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)
但我遇到的根本问题实际上是由于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)。