tomcat 发布找不到类

Posted 漫步CODE人生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat 发布找不到类相关的知识,希望对你有一定的参考价值。

 

运行较老的工程在tomcat 下,启动工程报错,依赖包找不到。找了一圈,不晓得发布目录在哪里。

于是重新设置了一把发布目录

serverpath 指向 D:\\tmp\\activityzone

 

再运行,发现目录下并没有同步过来依赖包。

 

于是只能手动处理了

将 target 下的lib 所有jar 拷贝到发布路径下

D:\\tmp\\activityzone\\wtpwebapps\\activityzone\\WEB-INF\\lib

找不到 Spring Boot Tomcat 类

【中文标题】找不到 Spring Boot Tomcat 类【英文标题】:Spring Boot Tomcat Class Not Found 【发布时间】:2017-10-17 00:35:27 【问题描述】:

我正在将我的 Spring 项目迁移到 Spring Boot。 但是,当我运行应用程序时,我得到了这个异常

19:09:31.059 [QUIET] [system.out] Caused by: java.lang.NoClassDefFoundError: org/apache/coyote/http11/AbstractHttp11JsseProtocol
19:09:31.059 [QUIET] [system.out]     at java.lang.Class.getDeclaredMethods0(Native Method)
19:09:31.059 [QUIET] [system.out]     at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
19:09:31.059 [QUIET] [system.out]     at java.lang.Class.getDeclaredMethods(Class.java:1975)
19:09:31.059 [QUIET] [system.out]     at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613)
19:09:31.059 [QUIET] [system.out]     at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:489)
19:09:31.059 [QUIET] [system.out]     at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:431)
19:09:31.060 [QUIET] [system.out]     at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:397)
19:09:31.060 [QUIET] [system.out]     ... 19 common frames omitted
19:09:31.060 [QUIET] [system.out] Caused by: java.lang.ClassNotFoundException: org.apache.coyote.http11.AbstractHttp11JsseProtocol
19:09:31.060 [QUIET] [system.out]     at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
19:09:31.060 [QUIET] [system.out]     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
19:09:31.060 [QUIET] [system.out]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
19:09:31.060 [QUIET] [system.out]     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
19:09:31.060 [QUIET] [system.out]     ... 26 common frames omitted

我在我的 SpringApplication 类中使用它

@SpringBootApplication
@ComponentScan(basePackages = "com.app")
public class MyApplication extends SpringBootServletInitializer 

    @Bean
    public EmbeddedServletContainerFactory servletContainer() 
        TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
        return factory;
    

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) 
        return application;
    

    public static void main(String[] args) 
        SpringApplication.run(MyApplication.class, args);
    

关于我为什么会遇到此问题以及如何解决此问题的任何想法?

这是我的毕业作品:

compile('org.springframework.boot:spring-boot-starter-web')
compile group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: '1.5.3.RELEASE'
compile 'org.apache.tomcat:catalina:6.0.53'
compile 'org.apache.tomcat:coyote:6.0.53'

【问题讨论】:

为什么依赖是compile范围?另见snacktrace.com/artifacts/org.apache.tomcat/tomcat-coyote/8.0.8/… 您正在使用 spring boot 1.5.3,它使用 tomcat 8 但对 tomcat 6 有依赖项。尝试删除 org.apache.tomcat 依赖项并仅保留 spring-boot-starter-web 依赖项。 谢谢@StanislavL!我使用的是 6.0.53,因为它是这里的最新版本 repo1.maven.org/maven2/org/apache/tomcat/coyote 没有意识到他们将其重命名为 tomcat-coyote 【参考方案1】:

你需要更新你的maven依赖,尝试执行:

mvn installmvn package

这将执行一个完整的maven生命周期。

你也可以看看这里:

Maven: Command to update repository after adding dependency to POM

【讨论】:

【参考方案2】:

删除:

@Bean
public EmbeddedServletContainerFactory servletContainer() 
    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
    return factory;

替换:

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) 
        return application;
    

与:

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) 
        return builder.sources(MyApplication.class);
    

spring-boot-starter-web 工件引入了spring-boot-starter-tomcat,因此无需将其显式包含在您的 gradle 文件中,请也将其删除。

删除:

compile 'org.apache.tomcat:catalina:6.0.53'
compile 'org.apache.tomcat:coyote:6.0.53'

spring-boot-starter-tomcat(这是spring-boot-starter-web的传递依赖)在使用Spring Boot1.5.3.RELEASE时带上支持的Tomcat8.5.14版本。

【讨论】:

是的,我删除了 6.0.53 依赖项,它工作正常

以上是关于tomcat 发布找不到类的主要内容,如果未能解决你的问题,请参考以下文章

找不到tomcat eclipse主jsp随机类

使用启用了安全管理器的 Tomcat 时,在类路径中找不到属性文件

Tomcat & Spring Web - 找不到类异常 org.springframework.web.context.ContextLoaderListener

在 ubuntu tomcat 上找不到类 com.sun.ws.rs.ext.RuntimeDelegateImpl

Tomcat服务器找不到DigestUtils apache类

spring+springmvc+myBatis框架,XXXMapper.xml在tomcat启动的时候找不到类