【问题标题】:java.lang.NoClassDefFoundError: org/hibernate/criterion/Criterion divide one project to two projects [duplicate]java.lang.NoClassDefFoundError:org/hibernate/criterion/Criterion将一个项目划分为两个项目[重复]
【发布时间】:2016-10-23 03:25:59
【问题描述】:

我目前收到上面的错误消息,我测试的所有内容都没有帮助。

我的程序昨天运行正常。今天我想把这个项目分成两部分。一个应该是数据库层(因为它应该被多个项目使用,从现在开始调用dataProj),第二个是GUI(从现在开始调用GUIProj)。

像往常一样,我现在在Project -> Propterties -> Java Build Path -> Projects 下写入guiProj 与dataProj 的新关系。

我在我的 tomcat 中做了同样的事情,就是这样: “Tomcat -> Add and Remove...”发布guiProjTomcat -> Open -> Open launch configuration -> Classpath”加dataProj

因为失败,我现在把这两个信息都写进了(GUIProj and dataProj) pom.xml:

guiProj pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>de.test.multi</groupId>
    <artifactId>guiProj</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>
    <name>my testproject</name>

    <parent>
        <groupId>de.test.multi</groupId>
        <artifactId>dataProj</artifactId>
        <version>1.0</version>
    </parent>
    ...
    <dependencies>
    ...
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.2.13</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.2.13</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.11.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.11.Final</version>
        </dependency>
    </dependencies>
</project>

dataProj pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>de.test.multi</groupId>
    <artifactId>dataProj</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
    <name>my data project</name>
    ...
    <dependencies>
    ...
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.2.13</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.2.13</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.11.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.11.Final</version>
        </dependency>
    </dependencies>
</project>

如果我现在开始 localhost:8080/guiProj GUI 出现,没有任何问题。在我想使用dataProj的类的那一刻,我得到了这个错误:

 WARNUNG: #{login.loginControl}: java.lang.NoClassDefFoundError: org/hibernate/criterion/Criterion
        javax.faces.FacesException: #{login.loginControl}: java.lang.NoClassDefFoundError: org/hibernate/criterion/Criterion
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
        at javax.faces.component.UICommand.broadcast(UICommand.java:315)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Unknown Source)
    Caused by: javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: org/hibernate/criterion/Criterion
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
        ... 27 more

有人知道为什么会出现这种失败吗?如果您需要更多信息,请告诉我。

我现在检查了有关该主题的多个答案,但该解决方案对我自己没有任何作用。

非常感谢您的帮助。

最好的问候 比约恩

重复的解释: 我不认为它是重复的,与帖子相关,此处已标记。因为 maven 为我自己加载了该库,而不是像链接的帖子中那样,缺少休眠库。项目在 Deployment Assembly 中配置,jar 放在 WEB-INF/lib 中。

【问题讨论】:

    标签: java hibernate jsp


    【解决方案1】:

    您需要在 guiProjdataProj 之间建立依赖关系,以便您的 guiProj 可以实际使用您的 dataProj

    这是一个例子:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>fr.gouv.finances.douane.gun.edop</groupId>
      <artifactId>check-dau-service</artifactId>
      <version>0.2.0-SNAPSHOT</version>
    
      <packaging>war</packaging>
    
      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.5.RELEASE</version>
      </parent>
    
      <properties>
        <java.version>1.7</java.version>
        <war.finalName>checkDAU</war.finalName>
      </properties>
    
    ...
    

    另外我建议你让你的项目模块化。

    这是一个很好的文档:http://books.sonatype.com/mvnex-book/reference/multimodule.html

    【讨论】:

    • 嗨,Michael,非常感谢您的快速响应,我按照您告诉我的方式编辑了我的项目。我对这两个项目进行了 Maven 更新,并尝试再次将其发布到我的 tomcat。简而言之:效果不佳:/您自己有更多信息吗?非常感谢!
    • 嗨。您应该遵循有关 Maven 多模块项目的文档。你的项目显然是模块化的,因为你有“gui”和“data”。
    猜你喜欢
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多