我正在开发一个Grails插件,其主要贡献是taglib。在Grails 3.1.11中它运行正常。我还有一个简单的Grails应用程序,仅用于测试插件。输入Grails 3.2.2。
将插件和应用程序迁移到3.2.2后,该插件没有生命迹象。应用启动时不再执行插件 doWithApplicationContext 闭包。 gsp:s找不到taglib。我通过使用Grails 3.2.2创建一个新的插件和应用程序来完成迁移,然后填写源代码。
对于这个含糊不清的问题感到抱歉,但我应该找出哪些字符串来找出问题所在?
编辑1:是的,我进行了完整性检查,让应用程序依赖于该插件的不存在版本并获得预期的冲突。所以并不是说插件与应用程序完全分离。
编辑2:在设置包grails.plugins
和org.grails.plugins
上的DEBUG登录后,会出现一条警告消息。它来自org.grails.plugins.CorePluginFinder
。它无法找到插件描述符(... Plugin.groovy)。我检查了插件jar,在一个以BOOT-INF为根的文件层次结构中找到了插件描述符类。显然,插件加载器没有查看该层次结构。我以为我看到了一个Grails bug,因为我不知道Boot重新打包。我在这里添加了一篇帖子,但在得到Graeme的答案后,我删除了帖子,因为它减少了注意力。
答案 0 :(得分:4)
您所看到的是,如果您在插件上运行extend
,则运行gradle assemble
任务,将插件JAR重新打包为可运行的JAR,这不是您在计划时所需的使用应用程序中的插件。
如果您只是运行bootRepackage
或gradle publish
或gradle publishToMavenLocal
,那么您将获得尚未通过Boot重新打包的JAR文件。据我所知,这不是Grails 3.1的改变。
如果您从未计划将插件用作实际应用程序或可运行的JAR文件,也可以在插件gradle jar
中一起禁用Boot重新打包:
build.gradle