【问题标题】:ClassNotFoundException in Tomcat 7Tomcat 7 中的 ClassNotFoundException
【发布时间】:2015-01-22 19:25:03
【问题描述】:

我在使用 Tomcat Web 应用程序的依赖项时遇到问题。我试过了:

  1. 将 .jar 添加到 WEB-INF/lib
  2. 在 $CATALINA_HOME/conf/catalina.properties 中添加路径
  3. 在 IntelliJ 的 Tomcat 配置中添加 .jar
  4. 将 .jar 添加到 $TOMCAT_HOME/lib

但是,当调用依赖项时,我得到了同样的错误:

java.lang.ClassNotFoundException: org.mongodb.morphia.Morphia
    java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    java.security.AccessController.doPrivileged(Native Method)
    java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    com.turn.quest.mongo.MongoManager.<init>(MongoManager.java:31)
    com.turn.quest.mongo.MongoManager.<clinit>(MongoManager.java:22)
    com.turn.quest.mongo.data.Document.<init>(Document.java:30)
    com.turn.quest.mongo.data.Template.<init>(Template.java:21)
    com.turn.quest.mongo.data.GeoTargetingTemplate.<init>(GeoTargetingTemplate.java:15)
    com.turn.jaxrs.template.TemplateController.get(TemplateController.java:30)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:606)
    com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:168)
    com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:71)
    com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:280)
    com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
    com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1341)
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1273)
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1223)
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1213)
    com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:414)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
    org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
    org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
    org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381)
    com.turn.quest.filters.ClickjackFilter.doFilter(ClickjackFilter.java:27)
    com.turn.quest.filters.PbAuthenticationFilter.doFilter(PbAuthenticationFilter.java:286)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:606)
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
    org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
    org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    com.sun.proxy.$Proxy315.doFilter(Unknown Source)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doFilter(AbstractPreAuthenticatedProcessingFilter.java:94)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)

如果我从 Tomcat 外部调用依赖,一切正常。

【问题讨论】:

    标签: java tomcat intellij-idea morphia


    【解决方案1】:

    您只需将其作为依赖项添加到您的 IDEA 项目定义中。如果您使用的是 maven 或 gradle,请将依赖项添加到您的构建文件中。例如,对于 maven,您可以将以下内容添加到您的 pom.xml 文件中:

    <dependency>
        <groupId>org.mongodb.morphia</groupId>
        <artifactId>morphia</artifactId>
        <version>0.109</version>
    </dependency>
    

    如果您通过 IDEA 配置项目:

    1. 转到File &gt; Project Structure
    2. 单击左侧项目设置部分中的模块链接。
    3. 选择使用依赖的模块。
    4. 单击依赖项选项卡。
    5. 点击右侧的添加按钮,选择“图书馆”
    6. 在“选择库”对话框中,单击“新建库...”按钮并从弹出列表中选择 Java
    7. 在“文件浏览器”对话框中,选择库的 JAR 文件,或包含 JAR 文件的目录(它将添加目录中的所有 JAR),或包含类的目录。
    8. 在文件选择器对话框中单击“确定”
    9. 在“配置库”对话框中,为库指定适当的名称。如果需要,您可以将源代码和 javadocs 添加到定义中。 (您也可以通过选择多个 JAR 在前面的步骤中的文件选择器中执行此操作。IDEA 会自动确定它们是类、源还是 Javadoc。)
    10. 在“配置库”对话框中单击确定。
    11. 返回“Choose Libraries”对话框,应选择您刚刚创建的库。 (如果没有,请选择它。)单击“添加所选”按钮
    12. 在“项目结构”对话框中单击“确定”。

    有关更多详细信息,请参阅帮助指南中的“配置模块依赖项和库”(也在 web here 上)。

    现在,当您通过 IDEA Tomcat 运行/调试配置将 Web 应用程序部署到 Tomcat 时,该库将与您的其余代码一起部署。有关详细信息,请参阅 IDEA 帮助指南(或 web here)中的“运行/调试配置:Tomcat”主题。

    【讨论】:

    • 依赖项已经在我的项目定义中。这很奇怪,因为我可以很好地使用 Tomcat 外部的依赖项,但是当它包含在 Tomcat servlet 中时会引发错误。
    • 更正,我刚刚注意到我的依赖项的错误切换为“NoClassDefFoundError”
    【解决方案2】:

    上述错误意味着包含类 org.mongodb.morphia.Morphia 的 jar 不存在于类路径中。因此,请确保在您的 Web 应用程序的 lib 或 tomcat 的 lib 中包含包含上述类的 jar。我想你可以从here 获得罐子。

    【讨论】:

      【解决方案3】:

      https://stackoverflow.com/a/42824675/2538853

      这是由于 Morphia jar 不是您的输出 war/jar 的一部分。 Eclipse 或本地构建将它们作为类路径的一部分包含在内,但远程构建或自动/计划构建不将它们视为类路径的一部分。

      您可以使用插件包含依赖的 jar。

      将下面的 sn-p 添加到你的 pom 的插件部分

      <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>3.0.0</version>
          <configuration>
              <descriptorRefs>
                  <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
          </configuration>
      </plugin>
      

      【讨论】:

        猜你喜欢
        • 2017-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-11
        • 2013-08-04
        • 2019-05-25
        • 1970-01-01
        • 2013-06-11
        相关资源
        最近更新 更多