Maven Parboiled和Cglib依赖冲突

Maven Parboiled和Cglib依赖冲突,maven,cglib,parboiled,Maven,Cglib,Parboiled,我正在开发一个使用cglib的程序,它是一个大型依赖项包(版本2.1_3)的一部分,并且已经编写了一个新特性,使用parboiled处理器进行一些标记到html的转换 这个问题产生于依赖冲突。 如果我什么也不做,我对parboiled特性的所有测试都会失败,消息如下: java.lang.IncompatibleClassChangeError: org/parboiled/transform/ParserClassNode 如果我包括以下排除项 <exclusion>

我正在开发一个使用cglib的程序,它是一个大型依赖项包(版本2.1_3)的一部分,并且已经编写了一个新特性,使用parboiled处理器进行一些标记到html的转换

这个问题产生于依赖冲突。 如果我什么也不做,我对parboiled特性的所有测试都会失败,消息如下:

java.lang.IncompatibleClassChangeError: org/parboiled/transform/ParserClassNode
如果我包括以下排除项

<exclusion>
     <groupId>asm</groupId>
     <artifactId>asm</artifactId>
</exclusion>
我正在使用pegdown 1.4.1


有什么建议吗?浏览互联网似乎建议使用新版本的asm(4.0或更高版本,目前我项目中的版本是1.5.3)可能会有所帮助,但尝试排除我拥有的asm并导入后一版本并没有帮助。

问题是cglib很难迁移。这是因为:

  • 较新的cglib版本与其早期版本不兼容
  • 较新版本与其早期版本不兼容(cglib构建在asm之上)
因此,委员会建议:

15如何解决全局类路径中或同一类加载器中可用的不同ASM API版本之间的冲突

使用ASM进行字节码处理的工具和框架(例如。 Hibernate、CGLIB、AspectWerkz)应在其内部重新打包ASM代码 自己的名字空间。这可以通过工具实现自动化


我建议您对cglib也这样做。将整个依赖项移动到新包中(创建独立的名称空间),并仅使用此依赖项。这是丑陋的,但这是唯一的解决办法。其他项目,如Hibernate或Hibernate,也以同样的方式处理cglib。

问题是cglib很难迁移。这是因为:

  • 较新的cglib版本与其早期版本不兼容
  • 较新版本与其早期版本不兼容(cglib构建在asm之上)
因此,委员会建议:

15如何解决全局类路径中或同一类加载器中可用的不同ASM API版本之间的冲突

使用ASM进行字节码处理的工具和框架(例如。 Hibernate、CGLIB、AspectWerkz)应在其内部重新打包ASM代码 自己的名字空间。这可以通过工具实现自动化

我建议您对cglib也这样做。将整个依赖项移动到新包中(创建独立的名称空间),并仅使用此依赖项。这是丑陋的,但这是唯一的解决办法。其他项目,如Hibernate或Hibernate,也以同样的方式处理cglib

Caused by: java.lang.NoClassDefFoundError: Could not initialize class net.sf.cglib.proxy.Enhancer