【问题标题】:Parboiled and Cglib dependency conflictParboiled 和 Cglib 依赖冲突
【发布时间】:2013-11-27 18:32:44
【问题描述】:

我正在开发一个使用 cglib 的程序,该程序作为大型依赖包(版本 2.1_3)的一部分包含在内,并使用半熟处理器编写了一个新功能,以进行一些降价到 html 的转换。

问题源于依赖冲突。 如果我什么都不做,我对 parboiled 功能的所有测试都会失败,消息如下:

java.lang.IncompatibleClassChangeError: org/parboiled/transform/ParserClassNode

如果我包含以下排除项

<exclusion>
     <groupId>asm</groupId>
     <artifactId>asm</artifactId>
</exclusion>

在声明我的大依赖项的地方,所有半熟测试都将通过,但大多数其他测试将失败,并显示如下消息

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

我正在使用 pegdown 1.4.1

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

【问题讨论】:

    标签: maven cglib parboiled


    【解决方案1】:

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

    • 较新的 cglib 版本与其早期版本不兼容
    • 较新的ASM 版本与其早期版本不兼容(cglib 建立在 asm 之上)

    FAQ to ASM因此建议:

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

    使用 ASM 进行字节码处理的工具和框架(例如 Hibernate、CGLIB、AspectWerkz)应该在它们的内部重新打包 ASM 代码 自己的名字空间。这可以使用Jar Jar Links 工具自动完成。

    我建议你对 cglib 做同样的事情。将整个依赖项移动到一个新包中(创建一个独立的名称空间)并且只使用这个依赖项。这很丑陋,但它是唯一的解决方案。 Spring 或 Hibernate 等其他项目以相同的方式处理 cglib。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 2011-03-12
      • 2019-12-24
      • 2021-12-14
      • 2022-01-24
      • 2021-12-03
      相关资源
      最近更新 更多