我正在研究一个网络项目中的MAVEN和JPA。不知怎的,我在NoClassDefFoundError上遇到了一个奇怪的错误,如下所示:
Caused by: java.lang.NoClassDefFoundError: WEB-INF/classes/org/huahsin/WebEngineering/Role (wrong name: org/huahsin/WebEngineering/Role)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at com.ibm.ws.classloading.internal.AppClassLoader.internalFindClass(AppClassLoader.java:214)
at [internal classes]
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:171)
at org.hibernate.internal.util.ReflectHelper.classForName(ReflectHelper.java:192)
at org.hibernate.ejb.packaging.NativeScanner.getClassesInJar(NativeScanner.java:136)
at org.hibernate.ejb.Ejb3Configuration.addScannedEntries(Ejb3Configuration.java:487)
at org.hibernate.ejb.Ejb3Configuration.scanForClasses(Ejb3Configuration.java:861)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:606)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:75)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:287)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1479)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1419)
... 27 more
我将persistence.xml
置于src/main/resources/META-INF
下,内容如下:
<persistence-unit name="WebEngineering" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>org.huahsin.WebEngineering.Role</class>
<class>org.huahsin.WebEngineering.User</class>
...
...
</persistence-unit>
在我的POM.xml中,我正在使用这些库:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.2.3.Final</version>
</dependency>
当我检查WAR文件时,我在Role.class
文件夹中看到了WEB-INF/classes/org/huahsin/WebEngineering
。我不确定我是否将持久文件放在正确的文件夹中,或者实际上我在MAVEN中使用了错误的JPA库?
persistence.xml
没有放在正确的位置导致此问题。它假设放在src/
目录中而不是放在resources/
目录下。我的初期是因为我使用MAVEN,persistence.xml
假设在resources/
目录中,但事实上我错了。
答案 0 :(得分:1)
我认为问题可能出在父级和子级的类加载器上。检查引用org/huahsin/WebEngineering/Role
的代码。您可以查看以下内容以获取更多可能性:
http://javareferencegv.blogspot.com/2013/10/debugging-javalangnoclassdeffounderror.html