当我收到“无法扫描[...]”警告时,如何在我的春季启动应用中处理JAR扫描?

时间:2019-06-03 12:01:16

标签: java spring-boot tomcat

当我使用Java 11而不是Java 8时,我会收到一些警告消息,因为某些新依赖项(jaxb,jaxws)。 消息是:

WARN  o.a.t.u.s.StandardJarScanner.log - Failed to scan [...] from classloader hierarchy

对于很多JAR(例如jaxb-api.jar,txw2-2.4.0-b180830.0438.jar,istack-commons-runtime-3.0.7.jar ...)

因此,我可以将其添加到我的@Configuration文件中

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

跳过所有JAR的JAR扫描。

所以我的问题是,此JAR扫描是什么,我需要它吗? 另外,我知道我可以将tomcat.util.scan.StandardJarScanFilter.jarsToSkip的jar添加到catalina.properties中,但是我可以在我的Spring Boot应用程序中这样做吗?

2 个答案:

答案 0 :(得分:0)

所以我仍然不知道JAR扫描的用途,但是我找到了一种方法来仅排除某些与jaxb相关的软件包。 将此添加到@Configuration文件

@Bean
    public TomcatServletWebServerFactory tomcatFactory() {
        return new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                Set<String> pattern = new LinkedHashSet<>();

                pattern.add("jaxb*.jar");
                pattern.add("jaxws*.jar");          

                StandardJarScanFilter filter = new StandardJarScanFilter();
                filter.setTldSkip(StringUtils.collectionToCommaDelimitedString(pattern));

                ((StandardJarScanner) context.getJarScanner()).setJarScanFilter(filter);

            }
        };
    }

答案 1 :(得分:0)

请参阅Sundararaj Govindasamy和rustyx的答案: AFTER upgrade from Spring boot 1.2 to 1.5.2, FileNotFoundException during Tomcat 8.5 Startup

例如在application.properties中:

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

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

您应该只列出有问题的罐子,例如使用*.jar将破坏对JSP / JSTL的支持。