我正在尝试在我们的 Grails 应用程序中使用Renjin作为 Jar 文件。在启动时,出现以下异常:
BeanCreationException: Error creating bean with name 'appService': Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: net/sf/cglib/core/DebuggingClassWriter
- 平台:Windows 7
- 应用程序的 Grails 版本:Grails 2.2.3
- 仁进版本:0.7.0-RC7
Google 搜索中的最高结果可能是唯一相关的帖子:NoClassDefFoundError in Grails app using XWiki with Markdown syntax
这表明 Grails cglib-2.2/asm-3.1 和您放在类路径中的另一个 jar 之间存在 jar 文件冲突。就我而言,我假设的是 Renjin jar 文件。
我选择升级到 cglib 3.0 和 asm 4.0。冲突似乎解决了。但是,该帖子的作者警告说,应用程序中的其他功能可能会受到影响。
当然,我可以再次重新测试整个应用程序(这需要一些时间但可行)。我的问题是:
- Grails 中如何使用 asm 和 cglib?
- 应用程序的哪一部分可能会受到影响?
- Renjin 使用的是 cglib 还是 asm 库?
更新:
奇怪的是,当我使用 Grails 2.2.3 (cglib-2.2/asm-3.1) 创建一个新的 Grails 应用程序并将 Renjin jar 放入类路径时,应用程序启动没有问题。
我做了一些关于 asm 和 cglib 的搜索。看来他们是
用于修改现有类或动态生成类,直接以二进制形式
引用自 ASM 主页。那么它们是允许我们修改 Grails 代码并在不重新启动应用程序的情况下查看更改的库吗?这是否意味着整个应用程序受到影响,我必须重新测试整个事情?