微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Spring Boot 1.2升级到1.5.2之后,Tomcat 8.5启动期间出现FileNotFoundException

如何解决从Spring Boot 1.2升级到1.5.2之后,Tomcat 8.5启动期间出现FileNotFoundException

根据 ,Servlet 3.0规范要求在服务器启动期间进行Jar扫描。

Tomcat正在使用org.apache.tomcat.util.scan。为此目的使用StandardJarScanner

来自 的javadoc 。

认的JarScanner实现 目录,然后 提供的类加载器,然后处理类加载器层次结构。此实现足以 并提供许多Tomcat特定的扩展。扩展名是:

  • 扫描类加载器层次结构(认情况下启用)测试所有文件以查看它们是否为JAR(认情况下禁用)

  • 测试所有目录以查看它们是否是分解的JAR(认情况下处于禁用状态)

  • 所有扩展 。

我们可以 此jar扫描。

我通过在application-xxx.properties文件添加以下属性来禁用它。该属性

# Comma-separated list of additional patterns that match jars to ignore for TLD scanning.    
server.tomcat.additional-tld-skip-patterns=*.jar

你可以找到 在这里

这些属性可用于配置 tomcat( Spring Boot)应用程序。

您可以按以下方式禁用 文件的JarScanner 。

@Bean
public EmbeddedServletContainerFactory embeddedServletContainerFactory() {
  return new TomcatEmbeddedServletContainerFactory() {
    @Override
    protected void postProcessContext(Context context) {
      ((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
    }
  };
}

<Context>
  ...
  <JarScanner scanManifest="false"/>
  ...
</Context>

请参阅:

解决方法

Spring Boot 从1.2.0 升级1.5.2

之后 即升级,Tomcat的 8.5 抛出 FileNotFoundException异常启动

下面是 一个 这些例外,它是投掷 超过10〜更多类似 的异常。

我不知道这些jar的 用途 ,换句话说,我没有<dependency>pom.xml中 添加这些jar

INFO: Starting Servlet Engine: Apache Tomcat/8.5.11
Apr 06,2017 3:53:57 PM org.apache.tomcat.util.scan.StandardJarScanner scan
WARNING: Failed to scan [file:/C:/Users/myname/.m2/repository/com/sun/xml/ws/jaxws-rt/2.1.7/jaxws-api.jar] from classloader hierarchy
java.io.FileNotFoundException: C:\Users\myname\.m2\repository\com\sun\xml\ws\jaxws-rt\2.1.7\jaxws-api.jar (The system cannot find the file specified)
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.<init>(ZipFile.java:219)
    at java.util.zip.ZipFile.<init>(ZipFile.java:149)
    at java.util.jar.JarFile.<init>(JarFile.java:166)
    at java.util.jar.JarFile.<init>(JarFile.java:130)
    at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:60)
    at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:48)
    at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:338)
    at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:288)
    at org.apache.jasper.servlet.TldScanner.scanJars(TldScanner.java:262)
    at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:104)
    at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:101)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5178)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

任何帮助,将不胜感激。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。