0

我正在尝试在我们的 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 代码并在不重新启动应用程序的情况下查看更改的库吗?这是否意味着整个应用程序受到影响,我必须重新测试整个事情?

4

1 回答 1

0

Renjin 使用 asm 即时编译部分 R 代码。我认为 asm 可能是另一种情况,除了 guava 我们应该重新打包以避免像您描述的那样令人讨厌的版本冲突。你能在github上添加一个问题报告吗?另请参阅 jersey-guava 以了解如何执行此操作并在有时间的情况下提交拉取请求。

于 2014-06-19T09:25:21.897 回答