springboot启动报jar包加载异常问题解决

问题描述:

springboot启动报jar包扫描错误,但不影响项目正常使用:
Failed to scan [file:/Users/ds/.m2/repository/com/sun/xml/bind/jaxb-impl/2.2.11/jaxb-core.jar] from classloader hierarchy
java.io.FileNotFoundException: /Users/ds/.m2/repository/com/sun/xml/bind/jaxb-impl/2.2.11/jaxb-core.jar (No such file or directory)
在这里插入图片描述

原因分析:

高版本的tomcat除了加载maven管理的jar包外,还会对jar包中的manifest.mf文件进行分析,加载manifest.mf文件中classpath定义的jar包。
在这里插入图片描述
例如:com.sun.xml.bind.jaxb-impl-2.2.11.jar包的MANIFEST.MF文件中Class-Path有jaxb-core.jar,但是该jar包没有定义版本号和路径,导致tomcat从jaxb-impl-2.2.11.jar的路径加载jaxb-core.jar,从而找不到jaxb-core.jar出现Failed to scan的异常。但其实这个jar包已经在其它地方引用了。

解决方案:

方案一:
降低tomcat版本到8.5.0或以下,高版本tomcat会对jar包中的manifest.mf文件进行分析。
方案二:
在启动类中配置不扫描manifest文件

    /**
     * 不扫描Manifest文件
     * @return
     */
    @Bean
    public TomcatServletWebServerFactory tomcatFactory() {
        return new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                ((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
            }
        };
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值