【问题标题】:Upgrading a plugin fails going from Grails 3.1.11 to 3.2.2从 Grails 3.1.11 升级到 3.2.2 时升级插件失败
【发布时间】:2017-03-14 18:47:59
【问题描述】:

我正在开发一个 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.pluginsorg.grails.plugins 上设置 DEBUG 日志记录后,出现警告消息。它来自org.grails.plugins.CorePluginFinder。它找不到插件描述符(...Plugin.groovy)。我检查了插件 jar,在以 BOOT-INF 为根的文件层次结构中找到了插件描述符类。显然插件加载器并没有考虑到那个层次结构。我以为我看到了 Grails 错误,因为我不知道 Boot 重新打包。我在此处添加了一个帖子,但在得到 Graeme 的回答后,我删除了该帖子,因为它分散了注意力。

【问题讨论】:

  • 如果不知道事情是如何编写的,真的没有很好的方法来解决问题。有很多事情可能是错误的。
  • 我将首先创建一个全新的 3.2.2 插件并将其构建文件复制到升级后的项目中,以确保所有依赖项在那里同步。
  • 我也会否决这样一个愚蠢的问题:) Grails 文档中非常需要的是用于设置更详细日志级别的关键内部包列表。在 Grails 2 中,日志配置默认带有这样的列表。在这种情况下,应用程序会毫无怨言地启动,但仍然无法正常工作。一个更好的问题是,给我一些日志记录设置以解决问题。我陷入了困境。
  • 给任何人点赞?即使问题很愚蠢,答案也很有价值。在 Grails 指南中很难找到引导重新打包,这是 Spring Boot 的事情。
  • "Grails 文档中非常需要的是用于设置更详细日志级别的关键内部包的列表。在 Grails 2 中,日志配置默认带有这样的列表。在这种情况下,应用程序开始时没有抱怨,但仍然不起作用。” - 随时在github.com/grails/grails-doc/issues 提出请求。

标签: grails grails-plugin


【解决方案1】:

您所看到的是,如果您在插件上运行 gradle assemble,则运行 bootRepackage 任务,该任务将插件 JAR 重新打包为可运行 JAR,这在您计划使用插件时不是您想要的来自应用程序。

如果你只是简单地运行gradle publishgradle publishToMavenLocalgradle jar 那么你得到的JAR 文件还没有被Boot 重新打包。据我所知,这不是 Grails 3.1 的变化。

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

bootRepackage.enabled = false

【讨论】:

  • 非常感谢,这是正确答案,我已经测试过了。然而,很明显有些东西发生了变化,在 3.2.2 和 3.1.11 下重复相同的构建/安装步骤会带来不同的结果。这可能是文档问题。 3.2.2 指南说要运行grails install(18.1 安装本地插件)。但是,此命令不存在。 gradle install存在,但明显调用Boot重新打包,gradle publishToMavenLocal不重新打包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
  • 2018-12-17
  • 2022-11-11
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多