hibernate org.objectweb.asm.classwriter - PullRequest
0 голосов
/ 12 мая 2011

Я получаю эту ошибку при запуске Java-приложения, в котором я работаю с Hibernate:

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

и я добавил все банки АСМ

Консоль

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)

1 Ответ

1 голос
/ 19 мая 2011

Это происходит, когда в поставляемой версии библиотеки отсутствуют необходимые классы. Хотя нет общего исправления, но вы можете попробовать этот подход, который работал для меня.

Все, что вам нужно сделать, это правильно исключить библиотеки ASM из гибернации и включить их отдельно. Кажется нечетким, но взгляните на фрагмент из рабочего pom.xml. Цель этого подхода - включить в проект более позднюю версию зависимой библиотеки, которая может потребоваться какой-либо другой 3-й библиотеке.

для включения диспетчера объектов гибернации, я использую следующий код.

    <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, а рядом с ним я включаю его отдельно

    <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>

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...