2016-05-26 2 views
0

Я получаю java.lang.NoClassDefFoundError: орг/спящий режим/услуги/загрузки классов/СПИ/ClassLoaderService ИсключениеNoClassDefFoundError в JPA 2.1

Я использую Maven 4, JPA 2.1, HSQLDB. я что-то пропустил в своем пом. я могу добавить его при необходимости. он терпит неудачу в модульных тестах, maven и т. Д. Я не знаю, почему. когда я запускаю его дома, он отлично работает без исключений. Пожалуйста, помогите мне в решении этой проблемы

persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
    <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
     http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" 
version="2.1"> 

<persistence-unit name="defaultUnit" transaction-type="RESOURCE_LOCAL"> 


    <class>com.core.Master</class> 
    <class>com.core.Child</class> 

    <properties> 
     <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" /> 
     <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:myTestDb" /> 
     <property name="hibernate.connection.username" value="sa" /> 
     <property name="hibernate.connection.password" value="" /> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" /> 
     <property name="hibernate.show_sql" value="false" /> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 

     <!-- insert data using sql file --> 
     <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/> 
     <property name="javax.persistence.schema-generation.create-source" value="metadata"/> 
     <property name="javax.persistence.schema-generation.drop-source" value="metadata"/> 
     <property name="javax.persistence.sql-load-script-source" value="import.sql"/> 

    </properties> 
</persistence-unit> 

, когда я запускаю следующую строку:

entityManagerFactory = Persistence.createEntityManagerFactory("defaultUnit"); 

он бросает исключение, как показано ниже

java.lang.NoClassDefFoundError: org/hibernate/service/classloading/spi/ClassLoaderService 
at org.hibernate.envers.event.EnversIntegrator.integrate(EnversIntegrator.java:65) 
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:312) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857) 
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) 
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843) 
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:397) 
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842) 
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75) 
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54) 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39) 
at com.jpa.generator.EntityManagerGenerator.create(EntityManagerGenerator.java:12) 
at com.core.TestMaster.testSqlInsert(TestMasterContainer.java:81) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:483) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:69) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:48) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:292) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
    Caused by: java.lang.ClassNotFoundException: org.hibernate.service.classloading.spi.ClassLoaderService 
at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
... 37 more 

pom.xml

 <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>5.1.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.1-api</artifactId> 
     <version>1.0.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>5.1.0.Final</version> 
    </dependency> 
      <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.7.5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hsqldb</groupId> 
     <artifactId>hsqldb</artifactId> 
     <version>2.3.2</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.9</version> 
     <scope>test</scope> 
    </dependency> 
+0

Включили ли вы зависимость от спящего ядра в файле pom.xml? org.hibernate гибернации-жильный 5.1.0.Final

+0

да я и сделал. Я тоже могу добавить своего мужа. но я использовал 4.3.5. Исходная версия – manu

+0

Можете ли вы добавить свою помню, чтобы ее проверить? –

ответ

0

Поскольку кто-то еще может столкнуться с этой проблемой, я хотел бы опубликовать, как я смог ее решить. Для решения этой проблемы было 2 части.

  1. Согласно Maven 3 and JUnit 4 compilation problem: package org.junit does not exist ссылка; junit не должен иметь <scope>test</scope> Избавиться от этой линии помогает получить maven, выполняющий тесты.

  2. Я получаю исключения из спящего режима. Это связано с тем, что у другой банки была зависимость от <artifactId>hibernate-envers</artifactId>. . Вы должны выяснить, имеют ли какие-либо баночки конфликты с версиями баннеров. вы можете проверить иерархию зависимостей в eclipse, перейдя на вкладку «Иерархия зависимостей» в вашем pom.xml Ввод в имя jar отобразит все банки, имеющие зависимости для этого файла jar.

надеюсь, что это поможет!