Renjin与Grails应用程序不兼容,以及如何在Grails中使用asm和cglib库

时间:2014-06-18 17:19:03

标签: java grails renjin

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

1 个答案:

答案 0 :(得分:0)

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