【问题标题】:Get custom grails plugin version from within the plugin从插件中获取自定义 grails 插件版本
【发布时间】:2013-11-14 08:16:08
【问题描述】:

我有一个我编写的 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.

【问题讨论】:

    标签: grails plugins


    【解决方案1】:

    您可以使用应用程序的_Events.groovy 中的eventCompileEnd 事件下方的GantBinding 获取应用程序中使用的所有插件的名称和版本,默认情况下可用于编译后事件。您可以根据name:

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

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

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

    在您的情况下,appCtx 在编译后事件中将不可用,因此您必须依赖GantBinding。

    【讨论】:

      【解决方案2】:

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

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

      pluginSettings 是当前范围内的绑定变量,isPluginProject 实际上返回一个 File 对象,该对象代表 GrailsPlugin.groovy 文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-24
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        • 2017-10-31
        相关资源
        最近更新 更多