从插件中获取自定义grails插件版本

时间:2013-11-03 16:53:56

标签: grails plugins

我有一个Grails插件,我在其持续集成环境中使用set-version编写了其版本集。在构建时,我想以编程方式从“eventCompileEnd”事件钩子中输出版本。因此,对于我的Grails应用程序,我可以获得“app.version”元数据,但插件版本在插件的根目录中的GrailsPlugin.groovy文件中设置。有没有办法获得这个价值?这是我所指的版本信息:

class MyUtilityGrailsPlugin {
   // the plugin version
   def version = "4.6.8"

   // the version or versions of Grails the plugin is designed for
   def grailsVersion = "2.1 > *"

   ...etc.

2 个答案:

答案 0 :(得分:3)

您可以在应用的eventCompileEnd中使用以下_Events.groovy事件,从GantBinding获取该应用中使用的所有插件的名称和版本,默认情况下该帖子可用于该帖子编译事件。您可以根据name

过滤插件信息
//scripts/_Events.groovy
eventCompileEnd = {msg->
    msg.supportedPluginInfos.each{println "${it.name} - ${it.version}"}
}

如果您想使用applicationContext从任何其他地方(例如:BootStrap)访问插件信息,这将是最简单的方法。像下面这样的东西会很有用:

//Bootstrap.groovy
def grailsApplication

def init = { servletContext ->
    grailsApplication.mainContext.getBean('pluginManager')
                                 .allPlugins.each{plugin->
        println "Plugin Info ${plugin.name} - ${plugin.version}"
    }
}

在您的情况下,appCtx将无法在后期编译事件中使用,因此您必须依赖GantBinding

答案 1 :(得分:0)

我发现可以通过执行以下操作从该插件的事件挂钩中检索版本信息:

pluginSettings.getPluginInfo(isPluginProject.getParent()).version;

pluginSettings是当前作用域中的绑定变量,isPluginProject实际上返回一个表示GrailsPlugin.groovy文件的File对象。