java.lang.NoClassDefFoundError:org / hibernate / criterion / Criterion将一个项目划分为两个项目

时间:2016-06-21 14:11:55

标签: java hibernate jsp

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

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

正如我通常所做的那样,我现在在Project -> Propterties -> Java Build Path -> ProjectsdataProj的新关系下写入了guiProj。

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

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

我现在检查了有关该主题的多个答案,但该解决方案并不适用于我自己。

非常感谢,感谢您的帮助。

祝你好运 的Björn

因重复而解释: 我不认为它是重复的,与发布有关,在这里标记。因为maven加载了我自己而不喜欢它的库是在链接的帖子中,缺少hibernate库。这些项目在Deployment Assembly中配置,将jar放在WEB-INF / lib。

1 个答案:

答案 0 :(得分:-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