java - hibernate org.objectweb.asm.classwriter

标签 java hibernate java-bytecode-asm

当我运行使用 hibernate 的 java 应用程序时,出现此错误:

java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter

我添加了所有 asm jar

控制台:

12 mai 2011 09:57:53 net.sf.hibernate.cfg.Environment <clinit>
INFO: Hibernate 2.1.6
12 mai 2011 09:57:53 net.sf.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
12 mai 2011 09:57:53 net.sf.hibernate.cfg.Environment <clinit>
INFO: using CGLIB reflection optimizer
12 mai 2011 09:57:53 net.sf.hibernate.cfg.Configuration configure
INFO: configuring from file: hibernate.cfg.xml
12 mai 2011 09:57:53 net.sf.hibernate.cfg.Configuration addResource
INFO: Mapping resource: org/projet/Timesheet.hbm.xml
12 mai 2011 09:57:53 net.sf.hibernate.cfg.Binder bindRootClass
INFO: Mapping class: org.projet.Timesheet -> timesheet
12 mai 2011 09:57:53 net.sf.hibernate.cfg.Configuration doConfigure
INFO: Configured SessionFactory: null
12 mai 2011 09:57:53 net.sf.hibernate.cfg.Configuration secondPassCompile
INFO: processing one-to-many association mappings
12 mai 2011 09:57:53 net.sf.hibernate.cfg.Configuration secondPassCompile
INFO: processing one-to-one association property references
12 mai 2011 09:57:53 net.sf.hibernate.cfg.Configuration secondPassCompile
INFO: processing foreign key constraints
12 mai 2011 09:57:53 net.sf.hibernate.dialect.Dialect <init>
INFO: Using dialect: net.sf.hibernate.dialect.MySQLDialect
12 mai 2011 09:57:53 net.sf.hibernate.cfg.SettingsFactory buildSettings
INFO: Maximim outer join fetch depth: 2
12 mai 2011 09:57:53 net.sf.hibernate.cfg.SettingsFactory buildSettings
INFO: Use outer join fetching: true
12 mai 2011 09:57:53 net.sf.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Using Hibernate built-in connection pool (not for production use!)
12 mai 2011 09:57:53 net.sf.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Hibernate connection pool size: 20
12 mai 2011 09:57:53 net.sf.hibernate.connection.DriverManagerConnectionProvider configure
INFO: using driver: org.gjt.mm.mysql.Driver at URL: jdbc:mysql://localhost:3306/timesheet
12 mai 2011 09:57:53 net.sf.hibernate.connection.DriverManagerConnectionProvider configure
INFO: connection properties: {user=root, password=manel}
12 mai 2011 09:57:53 net.sf.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
INFO: Transaction strategy: net.sf.hibernate.transaction.JDBCTransactionFactory
12 mai 2011 09:57:53 net.sf.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
INFO: No TransactionManagerLookup configured (in JTA environment, use of process level read-write cache is not recommended)
12 mai 2011 09:57:53 net.sf.hibernate.cfg.SettingsFactory buildSettings
INFO: Use scrollable result sets: true
12 mai 2011 09:57:53 net.sf.hibernate.cfg.SettingsFactory buildSettings
INFO: Use JDBC3 getGeneratedKeys(): true
12 mai 2011 09:57:53 net.sf.hibernate.cfg.SettingsFactory buildSettings
INFO: Optimize cache for minimal puts: false
12 mai 2011 09:57:53 net.sf.hibernate.cfg.SettingsFactory buildSettings
INFO: Query language substitutions: {}
12 mai 2011 09:57:53 net.sf.hibernate.cfg.SettingsFactory buildSettings
INFO: cache provider: net.sf.hibernate.cache.EhCacheProvider
12 mai 2011 09:57:53 net.sf.hibernate.cfg.Configuration configureCaches
INFO: instantiating and configuring caches
Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
    at net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:47)
    at net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.java:30)
    at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:24)
    at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:215)
    at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:117)
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
    at net.sf.hibernate.impl.SessionFactoryImpl.<clinit>(SessionFactoryImpl.java:236)
    at net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:791)
    at org.projet.ModelTime.configure(ModelTime.java:28)
    at org.projet.TestClient.main(TestClient.java:19)

最佳答案

当提供的库版本没有所需的类时,就会发生这种情况。虽然没有通用的修复方法,但您可以尝试使用对我有用的方法。

您需要做的就是从 hibernate 中正确排除 ASM 库并单独包含它。看起来很模糊,但看一下工作 pom.xml 中的片段。这种方法背后的目的是包含项目中其他一些第三个库可能需要的更高版本的依赖库。

为了包含 hibernate 实体管理器,我使用以下代码。

    <dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-entitymanager</artifactId>
     <version>${hibernate.version}</version>
    <exclusions>
        <exclusion>
         <groupId>asm</groupId>
         <artifactId>asm</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

在这里,我明确地将 asm 从 hibernate-entity manager 包含中排除,并在其旁边单独包含它

    <dependency>
      <groupId>asm</groupId>
      <artifactId>asm</artifactId>
      <version>${asm.version}</version>
    </dependency>

其属性是。这些版本选择在最新的项目中对我有用。

    <properties>
            <hibernate.version>3.6.0.Final</hibernate.version>
            <asm.version>3.3</asm.version>
    </properties>

希望这能解决您的问题。

关于java - hibernate org.objectweb.asm.classwriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5975695/

相关文章:

java - iload_1、iload_2、iload_3 和 iload #index 字节码有什么区别?

java - 具有自定义属性的 JCR 新节点类型

Java:返回一个扩展带有参数的抽象类的对象

java - 单向多对多只读关系

java - 使用 Hibernate 获取具有最大 id 值的实体

java - 如何使用 ASM 修改 Java BootstrapMethods 中的指令?

Java注解处理: Accessing "Element"s of non-annotated classes possible?

java - 需要在java中获取另一个java.exe版本

java - 我如何将我的资源放入多模块 Web 项目中已部署的 WAR 中

Java ASM 需要帮助