我正在尝试在我们的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
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 2.2.3(cglib-2.2 / asm-3.1)创建一个新的Grails应用程序并将Renjin jar放在类路径中时,应用程序启动没有问题。
我对asm和cglib进行了一些搜索。似乎他们是
用于修改现有类或直接以二进制形式动态生成类
引自ASM主页。那么它们是允许我们修改Grails代码并在不重新启动应用程序的情况下查看更改的库吗?这是否意味着整个应用程序受到影响,我必须重新测试整个应用程序?
答案 0 :(得分:0)
Renjin使用asm来动态编译部分R代码。我认为asm可能是另一种情况,除了番石榴,我们应该重新包装,以避免像你描述的那样令人讨厌的版本冲突。你能在github上添加问题报告吗?另请参阅jersey-guava,了解如何执行此操作并在有时间的情况下提交拉取请求。