当前位置: 首页 > 面试题库 >

如何通过Spring Boot禁用Tomcat清单扫描?

公良英资
2023-03-14
问题内容

我们有一个依赖项(JAR),它确实包含一个清单文件,该清单文件在其Class-Path条目中引用了其他JAR
。应用程序不需要这些引用的其他JAR,因此不会将它们添加为依赖项。

当应用程序启动时,tomcat会尝试解析该类路径条目,并且最终在日志中出现很多错误。喜欢:

The Class-Path manifest attribute in /Users/me/.m2/repository/org/bytedeco/javacpp-presets/openblas/0.3.3-1.4.3/openblas-0.3.3-1.4.3.jar referenced one or more files that do not exist: file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/openblas/0.3.3-1.4.3/javacpp.jar
The Class-Path manifest attribute in /Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl-platform-2019.0-1.4.3.jar referenced one or more files that do not exist: file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl.jar,file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl-linux-x86.jar,file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl-linux-x86_64.jar,file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl-macosx-x86_64.jar,file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl-windows-x86.jar,file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl-windows-x86_64.jar
The Class-Path manifest attribute in /Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl/2019.0-1.4.3/mkl-2019.0-1.4.3.jar referenced one or more files that do not exist: file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl/2019.0-1.4.3/javacpp.jar
The Class-Path manifest attribute in /Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-dnn-platform/0.16-1.4.3/mkl-dnn-platform-0.16-1.4.3.jar referenced one or more files that do not exist: file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-dnn-platform/0.16-1.4.3/mkl-dnn.jar,file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-dnn-platform/0.16-1.4.3/mkl-dnn-linux-x86_64.jar,file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-dnn-platform/0.16-1.4.3/mkl-dnn-macosx-x86_64.jar,file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-dnn-platform/0.16-1.4.3/mkl-dnn-windows-x86_64.jar
The Class-Path manifest attribute in /Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl-platform-2019.0-1.4.3.jar referenced one or more files that do not exist: file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl.jar,file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl-linux-x86.jar,file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl-linux-x86_64.jar,file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl-macosx-x86_64.jar,file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl-windows-x86.jar,file:/Users/me/.m2/repository/org/bytedeco/javacpp-presets/mkl-platform/2019.0-1.4.3/mkl-windows-x86_64.jar
...
WARNING: Failed to scan [file:/Users/domi/.m2/repository/org/bytedeco/javacpp-presets/hdf5-platform/1.10.3-1.4.3/hdf5.jar] from classloader hierarchy
java.io.IOException: java.lang.reflect.InvocationTargetException
    at org.apache.tomcat.util.compat.Jre9Compat.jarFileNewInstance(Jre9Compat.java:212)
    at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:65)
    at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:49)
    at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:374)
    at org.apache.tomcat.util.scan.StandardJarScanner.processURLs(StandardJarScanner.java:309)
...
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.GeneratedConstructorAccessor78.newInstance(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    at org.apache.tomcat.util.compat.Jre9Compat.jarFileNewInstance(Jre9Compat.java:209)
    ... 49 more
Caused by: java.nio.file.NoSuchFileException: /Users/domi/.m2/repository/org/bytedeco/javacpp-presets/hdf5-platform/1.10.3-1.4.3/hdf5.jar
    at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
    at java.base/sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
    at java.base/sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:145)
    at java.base/java.nio.file.Files.readAttributes(Files.java:1763)
    at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1222)
    at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:726)
...

如此处所述,Tomcat已实施了一项开关以禁用清单扫描以防止出现此问题:https
:
//bz.apache.org/bugzilla/show_bug.cgi?id=59961

在常规的tomcat安装中,我们可以执行以下操作(https://tomcat.apache.org/tomcat-8.0-doc/config/jar-
scanner.html):

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

如何通过Spring Boot禁用Tomcat清单扫描?


问题答案:

你可以喜欢底部

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


 类似资料:
  • 我们有一个依赖项(JAR),它确实包含一个清单文件,该文件在其条目中引用了其他JAR。应用程序不需要这些引用的其他JAR,因此不会作为依赖项添加。 当应用程序启动时,tomcat 会尝试解析该类路径条目,最终在日志中出现大量错误。喜欢: 如这里所述,Tomcat已经实现了一个开关来禁用清单的扫描,以防止出现此问题:https://bz.apache.org/bugzilla/show_bug.cg

  • 我在日志中收到一些警告,像这样: 在一个独立的tomcat中,我可以创建一个: 如何禁用清单文件的JarScanner(https://tomcat.apache.org/tomcat-8.0-doc/config/jar-scanner.html)在使用Spring Boot的java配置类中。

  • 问题内容: 我已经尝试过了,但它不起作用。那么如何通过jQuery重置表单? 问题答案: 是DOM元素方法(jQuery对象上没有),因此您需要: 还是没有jQuery:

  • 在Checkmarx扫描中,我收到了易受攻击的例外, 获取dr元素的用户输入。然后,此元素的值在没有经过适当清理或验证的情况下流经代码,并最终在方法中显示给用户

  • 问题内容: 我想通过向Jenkins发送后卷曲请求来禁用Jenkins作业。 我尝试使用以下方法进行操作: 但每次都失败。我得到的错误是: 403请求中未包含有效面包屑 是否有基于卷曲的良好解决方案? 问题答案: 捏碎错误表明您正在使用CSRF保护。您需要在请求中包含适当的面包屑标头。面包屑可以从Jenkins API获得,如上面链接的JenkinsWiki页面所述。“使用curl和crumb触发

  • 问题内容: 我正在玩弄节点,并将其安装在我的机器上。现在,我想获取机器上正在运行的进程的列表,以便查看Apache是​​否正在运行,MySQL是否已启动等?我怎样才能做到这一点?我的js文件中只有非常基本的代码。我什至不知道从哪里开始。 这是我的代码: 问题答案: 据我所知,还没有一个模块可以做这个跨平台。您可以使用子流程API来启动提供所需数据的工具。对于Windows,只需启动内置任务列表过程

  • 我想禁用默认RabbitMockConfiguration中的兔子健康检查。我们有一个通过导入的配置。不幸的是,该配置并不能阻止将健康检查添加到健康指示器中,因为一旦spring-rabbit位于类路径中,就会发生这种情况。 我们有一个解决办法,即在使用该配置的每个服务中添加一个属性文件,这将禁用属性,但对我们来说,如果能够在配置级别禁用该heathcheck将会好得多。 我考虑了使用进行的测试,

  • 问题内容: 我创建一个这样的列表列表: 然后,我想在第一个子列表中插入10,如下所示: 但是,出现以下错误: 线程“主”中的异常java.lang.IndexOutOfBoundsException:Index:0,Size:0 at java.util.ArrayList.rangeCheck(ArrayList.java:653)at java.util.ArrayList.get(Array