Grails有那么多的插件,用起来很方便。
最近用了mail plugin,测试发送邮件都正常了,正好要睡觉了,最后看看代码都放controller里面太臭了,加了个MailService,也没测,就提交了,睡觉。
第二天,再跑服务,报错。
java.lang.StackOverflowError
at sun.reflect.GeneratedMethodAccessor307.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaMethod.invoke(ClosureMetaMethod.java:80)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoMetaMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:307)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:63)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124)
at MailGrailsPlugin$_configureSendMail_closure7.doCall(MailGrailsPlugin.groovy:154)
对Grails底层研究不够,尝试了N种办法均未果,不得不新建工程,一步步测,突然想起来那个MailService,原工程改了名字后,就正常了。
其实原因很简单,Grails底层是Spring,mail plugin也有个MailService,会在任何调用sendMail方法的controller里面注入名为mailService的服务,而我的Service和它冲突了。
1、如何避免这种冲突呢?如果插件用的越多,那么重名的可能性会更大了。曾经碰到过一个这样的例子,有个朋友配置aop事务的时候,用了pointcut="execution(* com..*Manager.*(..))",结果也是和引用的jar包里面冲突了。不知道这种问题如何去解决和避免。
2、Grails错误日志还有待提高,难怪Matt Raible在他的《COMPARING JVM WEB FRAMEWORKS》中评价有一句Stack traces are horrendous。
参考资料
http://www.grails.org/plugin/mail
http://raibledesigns.com/rd/entry/my_comparing_jvm_web_frameworks
分享到:
相关推荐
为了在Grails环境中方便地使用SVN,我们需要安装一个支持SVN的客户端插件,这就是Subclipse。本指南将详细介绍如何在Grails环境中安装Subclipse插件。 首先,启动你的Eclipse集成开发环境(IDE),这是Grails通常...
2. **安装Grails插件**:有了GroovyEclipse的支持,我们还需要安装Grails插件。同样地,可以通过Eclipse的"Help" -> "Install New Software",添加Grails插件的更新站点(如:...
《Grails技术详解:中文文档与Fckeditor-0.9.5插件解析》 Grails,作为一款基于Groovy语言的开源Web应用框架,以其高效、简洁的特性深受开发者喜爱。它集成了许多Java EE的功能,同时简化了开发流程,使得开发人员...
Eclipse 插件 Grails(Groovy)是一个强大的开发工具,它使得在Eclipse环境中进行Groovy和Grails应用的开发变得更为便捷。Groovy是一种动态、面向对象的编程语言,而Grails则是一个基于Groovy的开源Web应用框架,...
elasticsearch-grails-plugin, 恢复的ElasticSearch grails插件 Elasticsearch插件插件这个项目是一个基于Elasticsearch的插件,这个项目是基于的人完成的伟大工作的。你为什么想要为原来的Elasticsearch插件提供...
用于 Grails 框架的 MyBatis 插件 基于原始 Grails-iBatis 插件:Brian Sanders ( ) Grails 插件主页: : 修改: 命名约定的一些变化 添加了对多个数据源的完全支持 Grails 2.0 插件重构 最小 Grails 依赖项 ...
4. 集成视图:插件提供了一系列预定义的视图,用于展示登录、注册、权限错误等页面,开发者可以根据需求进行定制。 二、Grails Shiro UI 插件的集成与使用 集成Grails Shiro UI 插件通常涉及以下步骤: 1. 添加...
5. **Grails插件系统**:Grails拥有庞大的插件库,涵盖各种功能,如安全、缓存、报表、测试等。通过插件,开发者可以轻松地扩展框架功能,避免重复造轮子。 6. **Grails构建工具**:Grails的构建系统自动化处理许多...
5. **插件系统**:Grails的插件系统是其灵活性的一大体现,允许开发者复用和扩展功能。例如,有用于安全性的spring-security-core插件,用于邮件发送的mail插件,以及用于RESTful API的rest-api-doc插件等。这些插件...
3. **插件系统**:Grails 插件是一组可重用的功能模块,可以快速增强应用程序的功能,如Spring Security、Asset Pipeline等。 4. **命令行工具**:Grails 提供强大的命令行工具,支持创建项目、运行应用、生成代码...
Grails Pjax插件Pjax在Grails中。 Pjax类似于(turbolinks)[ ,在'A'标签,按钮和表单上工作。 参见_pjaxHeader grails templtate文件中的演示代码。 ## Pjax是什么? Pjax是一个jQuery插件,它使用ajax和pushState...
《Grails Acegi 0.5插件:深入解析与应用》 在Web应用程序开发领域,安全性始终是不可忽视的重要一环。Grails Acegi 0.5插件,作为一个针对Grails框架的安全管理插件,为开发者提供了一种强大且灵活的方式来实现...
注意,尽管Eclipse对Grails的支持相比IntelliJ IDEA和NetBeans可能稍显不足,但通过Groovy Eclipse插件的配置,开发者依然能在Eclipse中高效地进行Grails开发。不断更新插件和学习最佳实践将有助于提升开发体验。
**Grails插件:Calendar** Grails是一款基于Groovy语言的开源Web应用框架,它简化了Java开发,提供了丰富的功能和灵活的架构。在Grails社区中,开发人员经常创建插件来扩展框架的功能,满足特定的需求。"Calendar...
如果你遇到因插件导致的编辑错误,可以在 `grails-app/conf/BuildConfig.groovy` 文件中添加以下配置: ``` grails.project.plugins.dir="./plugins" ``` 这将恢复旧的插件存储位置,从而解决编辑问题。 3. **...
Grails的插件系统是其一大亮点,许多常见的功能,如安全、缓存、报表等,都有现成的插件可以直接集成。比如,spring-security-core 提供了全面的安全管理,cache 提供了缓存功能。 六、GSP(Groovy Server Pages) ...
这些插件提供了预防攻击、字符串编码解码、身份验证等安全机制。 最后,Grails社区还提供了丰富的插件库,这些插件可以扩展Grails的功能,例如添加缓存支持、邮件服务或者其他定制化功能。开发者可以很方便地在...