【问题标题】:Grails service injection null when injected service has older grails version当注入的服务具有较旧的 Grails 版本时,Grails 服务注入 null
【发布时间】:2014-11-17 18:19:36
【问题描述】:

我编写了一个 Grails 插件,用 Grails 2.1.1 编写,它提供服务。现在,我使用 Grails 2.4.4 创建了一个新的 Grails 项目,并想注入该服务,但失败了。

package testproject

class HomeController {

    def myService

    def index() {
        println myService
    }
}

总是打印null。我使用 Grails 2.4.4 项目和 Grail2 2.4.3 项目对此进行了测试。当我使用 Grails 2.1.1 创建我的 Grails 项目时,它可以工作。

为什么?不应该是较新版本可以访问的服务吗?我是否总是必须升级包含服务的插件才能使用更新的 Grails 版本?

【问题讨论】:

  • 如何安装插件?您是否将其用作内联插件,或与 maven-install 一起使用,或通过发布到内部存储库(例如 Artifactory)?
  • 你好,我使用的是本地还是maven-install都没关系。我在我的 Mac OS Yosemite 上使用最新的 GGTW 版本进行了测试,但现在也在 Win7,64bit 上使用 ggts 3.6.2 版本进行了测试。我还在新项目中使用了 grails 2.4.3,也遇到了同样的问题。
  • 2.4.3 相当有问题(尤其是 wrt 插件),所以一定要使用 2.4.4+。请注意,重新运行maven-install 不会用相同版本替换现有插件,因此请更改版本,或删除该版本的 maven 本地缓存目录,即 $HOME/.m2/repository/org/grails/plugins/ //
  • 你的意思是,改变插件的版本?
  • 您的评论中没有有用的信息 - Grails 中的堆栈跟踪需要自下而上阅读,因为它们通常是由异常引起的链,根本原因在底部,不是顶部

标签: grails plugins service version code-injection


【解决方案1】:

我也遇到过这个问题,直到 2.4.4 才出现。我有一个依赖于 Spring Security Plugin 的自定义安全插件。在我的插件中,我在 doWithSpring 中设置了一个自定义用户详细信息服务。这个定义看起来像这样:

    userDetailsService(UserService) {
        grailsApplication = ref('grailsApplication')
        errorService = ref('errorService')
    }

我在我的应用程序和插件中引用了 userService。这些引用在 Grails 2.4.4 中停止注入。我能够通过用 userDetailsS​​ervice 替换这些引用来修复它。不过我不喜欢这样,因为引用看起来像是指向该服务的 Spring Security 版本,而且我正在调用仅存在于我的 UserService 类中的方法。

无论如何,我不确定这是否是 2.4.4 中的错误或错误修复,但请检查并确保您的插件和/或 resources.groovy 文件没有将您的 MyService 类重新定义为其他内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多