1

我想将Struts2约定插件(2.3.8)与hibernate(netbeans框架插件3.2.5)一起使用,但是在两个不同的asm.jar版本之前存在冲突。

Hibernate 与 struts2 fw 一起工作正常,但是当我添加约定插件时,我得到错误:

java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
  • Hibernate 3.2.5 需要asm.jar
  • Struts2约定插件需要asm-3.3.jar

恕我直言,约定插件需要类:ClassWriter,它位于 asm-3.3.jar 中,但在 asm.jar 中查找。

  • 用maven测试(没有冲突,但没有运行)
  • 在没有 Maven 的情况下测试(未运行)

当休眠 3.2.5 无法更改为更高版本时,有什么解决方案可以实现这一点吗?

4

3 回答 3

0

一种技巧是更新休眠插件库 asm.jar 和 asm-3.3.jar。您需要使用 asm-3.3.jar 检查 Hiberate 是否存在特定问题。

如果那行不通,那么我能想到的东西很少

  • 模块化(将hibernate相关类移动为子项目并将库限制为子项目)
  • 如果上述方法不可行,那么在调用堆栈中找一个位置来操作类加载器缓存(丢弃加载的类并从特定的 jar 加载等等)。就个人而言,这将是痛苦的维护。

相关帖子

于 2012-12-28T03:55:04.030 回答
0

如果可以,尝试将 Hibernate 升级到使用与 Struts 2.3.8 相同版本的 asm 库的最新版本。您还可以尝试从 Hibernate 集中排除 asm 库 - 使用 Maven,您必须添加部分。

于 2012-12-28T07:10:04.443 回答
0

恕我直言,问题不在于图书馆冲突。我只与一个库Hibernate 3.2.5.ga一起使用。我在项目中使用的库(仅关于and )是:Struts 2.3.7asmHibernateStruts

 ├── hibernate
 │   ├── dom4j-1.6.1.jar
 │   ├── ehcache-1.2.3.jar
 │   ├── hibernate3.jar
 │   ├── hibernate-annotations.jar
 │   ├── hibernate-commons-annotations.jar
 │   ├── hibernate-entitymanager.jar
 │   ├── hibernate-tools.jar
 │   ├── javassist.jar
 │   ├── jdbc2_0-stdext.jar
 │   └── jta.jar
 ├── struts-2.3.7
     ├── antlr-2.7.2.jar
     ├── asm-3.3.jar
     ├── asm-commons-3.3.jar
     ├── cglib-nodep-2.2.2.jar
     ├── commons-beanutils-1.8.0.jar
     ├── commons-collections-3.1.jar
     ├── commons-digester-2.0.jar
     ├── commons-fileupload-1.2.2.jar
     ├── commons-io-2.0.1.jar
     ├── commons-lang-2.5.jar
     ├── commons-lang3-3.1.jar
     ├── commons-logging-1.1.1.jar
     ├── freemarker-2.3.19.jar
     ├── ognl-3.0.5.jar
     ├── struts2-convention-plugin-2.3.7.jar
     ├── struts2-core-2.3.7.jar
     ├── struts2-fullhibernatecore-plugin-2.2.2-GA.jar
     ├── struts2-json-plugin-2.3.7.jar
     └── xwork-core-2.3.7.jar
于 2012-12-28T12:44:17.180 回答