上周我和家人一起去伦敦度假,很幸运在我访问期间举行了伦敦GGUG聚会。 David Dawson讨论了将Grails应用程序重构为多个插件的过程(您可以在此处查看他的演讲视频)。 他提到的一件事是可以像独立应用程序一样运行插件的想法,因为Grails应用程序和插件的结构是如此相似,我认为研究将应用程序转换为插件或插件的过程会很有趣。应用程序插件。
我将在这里讨论的方法包括很多关于我喜欢如何创建应用程序和插件(即YMMV)的偏见。 我也不会进行部分转换,因为David在他的演讲中很好地阐述了这一点。
因此,要将应用程序转换为插件,一般的工作流程将类似于
- 创建插件描述符FooGrailsPlugin.groovy。 最简单的方法是运行
grails create-plugin pluginname
并从那里复制生成的文件 - 从
application.properties
删除所有内容,但app.grails.version
属性除外 - 如果lib目录中有可以在Maven存储库中使用的jar,请将其删除并替换为
BuildConfig.groovy
依赖项 - 通过添加
export = false
来更改开发和测试所需的所有插件和jar依赖关系,但在不安装插件时将其更改为不导出 - 如果您需要
_Install.groovy
,_Uninstall.groovy
或_Upgrade.groovy
脚本(您可能不需要),则从步骤1的虚拟插件中获取脚本(但删除_Upgrade.groovy
脚本,它们都是可选的) - 如果您不使用它并且不依赖资源插件,请删除
ApplicationResources.groovy
- 将代码从
BootStrap.groovy
init()
移至FooGrailsPlugin.doWithApplicationContext
和/或FooGrailsPlugin.doWithDynamicMethods
然后将destroy()
移至FooGrailsPlugin.onShutdown,然后删除BootStrap.groovy
- 在
BuildConfig.groovy
为release
插件添加依赖项 - 从
Config.groovy
删除除log4j配置之外的所有内容 - 除非已导出映射,否则请删除
UrlMappings.groovy
; 只保留添加的 - 将bean定义从
resources.groovy
移到FooGrailsPlugin.doWithSpring
并删除resources.groovy
- 除非添加了消息,否则删除
grails-app/i18n
消息捆绑文件; 只保留添加的 - 从
grails-app/views
中删除所有您不使用的内容(尤其是error.gsp
,index.gsp
和layouts/main.gsp
) - 从您不使用的
web-app
中删除所有内容(包括WEB-INF xml和tld文件) - 现在将是编写您一直想要去做的那些测试的好时机
- 创建一个或多个测试应用程序以将插件安装到其中,以确保它可以作为插件工作; 考虑编写脚本
- 编写有关如何使用插件的文档; 至少需要一个README文件,但Grails gdoc文件会更好(运行
grails doc --init
即可开始使用)
将插件转换为应用程序是类似的,除了大部分相反:
- 使用
grails create-app appname
创建虚拟应用程序以从中复制丢失的文件- 将
BootStrap.groovy
,Config.groovy
,UrlMappings.groovy
和ApplicationResources.groovy
移到grails-app/conf
,如果需要合并 - 将
resources.groovy
移至grails-app/conf/spring
- 将消息捆绑文件移动到
grails-app/i18n
,如果需要合并 - 将缺少的GSP移至
grails-app/views
- 从
web-app
移动静态资源 - 从
web-app/WEB-INF
移动xml和tld文件
- 将
- 将代码从
FooGrailsPlugin.doWithApplicationContext
和FooGrailsPlugin.doWithDynamicMethods
移至BootStrap.groovy
init()
,并将代码从FooGrailsPlugin.onShutdown
移至destroy()
- 将Bean定义从
FooGrailsPlugin.doWithSpring
移到resources.groovy
- 删除插件描述符
- 恢复
application.properties
缺少的属性 - 删除
_Install.groovy
,_Uninstall.groovy
和_Upgrade.groovy
脚本 - 从
BuildConfig.groovy
删除release
插件的依赖性 - 现在是编写您一直想要去做的那些测试的好时机
- 如果您在插件的
doWithWebDescriptor
进行更改,请运行grails install-templates
并将其添加到src/templates/war/web.xml
- 如果您添加自定义工件,或者在
onChange
和/或onConfigChange
中支持开发环境代码或配置更改,则这些更改不能在应用程序中直接执行。 将pluginator插件用于这些应用程序,以及用于需要运行时逻辑的动态web.xml
更改
- 使用
我可能已经跳过了几个步骤,并且肯定省略了很多细节,但这应该涵盖每种转换类型的大部分过程。
翻译自: https://www.javacodegeeks.com/2013/07/converting-grails-applications-to-plugins-and-vice-versa.html