将插件从 Grails 3.1.11 升级到 3.2.2 失败

Upgrading a plugin fails going from Grails 3.1.11 to 3.2.2

我正在开发一个 Grails 插件,它的主要贡献是一个标签库。在 Grails 3.1.11 中它工作正常。我还有一个简单的 Grails 应用程序,仅用于测试插件。输入 Grails 3.2.2.

将插件和应用程序迁移到 3.2.2 后,插件没有生命迹象。插件 doWithApplicationContext 闭包不再在应用程序启动时执行。 gsp:s 未找到 taglib。我通过使用 Grails 3.2.2 创建一个新的插件和应用程序来完成迁移,然后填写源代码。

很抱歉提出这个含糊的问题,但我应该了解哪些问题才能找出问题所在?

编辑 1:是的,我进行了健全性检查以使应用程序依赖于插件的不存在版本并得到了预期的冲突。所以并不是说插件和app完全解耦了。

编辑 2: 在包 grails.pluginsorg.grails.plugins 上设置 DEBUG 日志后出现一条警告消息。它来自 org.grails.plugins.CorePluginFinder。它找不到插件描述符 (...Plugin.groovy)。我检查了插件 jar,在以 BOOT-INF 为根的文件层次结构中找到了插件描述符 class。很明显,插件加载器没有查看该层次结构。我以为我看到了一个 Grails 错误,因为我不知道引导重新打包。我在这里添加了一个 post 来达到这个效果,但是在得到 Graeme 的回答后我删除了 post 因为它会分散注意力。

您所看到的是,如果您在插件上 运行 gradle assemble,那么 bootRepackage 任务是 运行,它将插件 JAR 重新打包为 运行启用 JAR,当您计划从应用程序使用插件时,这不是您想要的。

如果您只是 运行 gradle publishgradle publishToMavenLocalgradle jar 那么您将获得未被 Boot 重新打包的 JAR 文件。据我所知,这不是 Grails 3.1 的变化。

如果您不打算将插件用作实际应用程序或运行可用的 JAR 文件,您也可以在插件 build.gradle 中禁用引导重新打包:

bootRepackage.enabled = false