springboot项目在外部tomcat运行出现的问题

本文讲述Java项目去除自带tomcat服务、改装启动器等操作后,在服务器启动tomcat报错的解决过程。报错原因主要是JDK版本不对应和jar包冲突,通过在pom文件屏蔽依赖、在tomcat配置文件屏蔽jar包扫描,最终解决了启动和访问报错问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、去除自带的tomcat服务

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2、改装启动器

@SpringBootApplication
public class BdknowsApplication extends SpringBootServletInitializer {

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(BdknowsApplication.class);
    }
}

3、maven 插件

                <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

4、可以进行clean package操作,对了<packaging>war</packaging>最好也加到pom里面!
5、传到服务器,启动tomcat,结果是服务能运行,但是查看tomcat启动log,报了错,一大堆

ERROR org.apache.catalina.startup.ContextConfig- Unable to process Jar entry [module-info.class] from Jar [jar:file:/opt/app/tomcat/webapps/test/WEB-INF/lib/jackson-datatype-jdk8-2.11.1.jar!/] for annotations

类似报错log有很多,上网查了一下类似问题,这类问题生成的原因主要有两个:
1、jDK版本不对应
2、jar包冲突

第二个是最常见的,冲突的原因就是你本地pom虽然屏蔽了本地tomcat的引用,但是还有部分依赖没有屏蔽掉,比如 jackson-datatype-jdk8-2.11.1.jar 这个!我第一想法就是消除本地相关依赖,毕竟tomcat服务是公用的,我不能更改以至于影响其他人使用。此时又出现其他让人头疼的问题!!!

上面类似报错信息类似的有十多个,我在pom文件中通过插件快速定位到相关依赖并且进行屏蔽,本地启动测试,没问题,启动成功。打war包上传服务器,启动tomcat,启动成功,本地进行访问服务,报错500!<h1>HTTP Status 500 - No converter found for return value of type: class java.util.LinkedHashMap</h1>

删除依赖过多以至于部分基础包也无法使用,上网搜索有大佬给出了一个方法!在tomcat启动的时候让他不再扫描这几个包。打开在tomcat的conf目录里面catalina.properties的文件,在tomcat.util.scan.DefaultJarScanner.jarsToSkip=\这行代码下面加上去你要屏蔽的jar包,比如我上面报错的包名是jackson-datatype-jdk8-2.11.1.jar, 我便在下面加上 jackson-datatype*.jar\,重启tomcat,便不再包错了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值