1

私は Web プロジェクトで 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/が、実際には間違っていました。

4

1 に答える 1

1

親と子のクラスローダーに問題があると思います。が参照されているコードを確認してくださいorg/huahsin/WebEngineering/Role。さらなる可能性については、以下をご覧ください。

http://javareferencegv.blogspot.com/2013/10/debugging-javalangnoclassdeffounderror.html

于 2013-10-17T21:15:00.903 に答える