java - Tomcat 不扫描 JAR 中的 JAR

标签 java maven tomcat web-applications tomcat9

我有两个 Web 应用程序(比如 A.war 和 B.war),它们依赖于一些通用代码(比如 C.jar)来交换信息。所以我在两个 webapps 的 POM 文件中做了什么,我添加了范围为“提供”的 JAR。

<dependency>
    <groupId>some.web.app</groupId>
    <artifactId>C</artifactId>
    <version>${project.version}</version>
    <type>jar</type>
    <scope>provided</scope>
</dependency>

然后我将C.jar复制到Tomcat的lib文件夹中,这样就可以共享了。因此,当我尝试通过将 war 文件复制到 webapps 文件夹并启动 Tomcat 来部署任何 war 文件时,我在启动时看到一堆丢失的 JAR 错误:

25-Oct-2019 15:07:43.752 WARNING [main] org.apache.tomcat.util.scan.StandardJarScanner.processURLs Failed to scan [file:/H:/apache-tomcat-9.0.27/lib/logback-classic-1.1.3.jar] from classloader hierarchy
    java.io.FileNotFoundException: H:\apache-tomcat-9.0.27\lib\logback-classic-1.1.3.jar (The system cannot find the file specified)
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:225)

但是 Tomcat 提示的所有 JAR 都在 C.jar 的“lib”文件夹中。有没有办法让 Tomcat 扫描 C.jar 中的 JAR。我不确定我所做的事情是否正确。我以前玩过 Tomcat/Maven,但从来没有这么详细。任何帮助将不胜感激。

最佳答案

我在 Tomcat 的 context.xml 中将 JARScanner 下的 scanManifest 设置设置为 true。我将其设置为 false,错误消失了。

<JarScanner scanAllDirectories="true" scanAllFiles="true" scanBootstrapClassPath="true" scanClassPath="true" scanManifest="false" />

关于java - Tomcat 不扫描 JAR 中的 JAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58556243/

相关文章:

eclipse +tomcat 8.0 : 404 even after "use tomcat installation"

android - 带有受信任证书的 KSaop2 HttpsTransportSE 的 SSLHandshakeException

java - Spark - 读取 json 文件时出现问题

Java 8 根据偶数求和或减去

java - Ivy、Maven - 映射传递依赖

c++ - 如何配置 NAR Maven 项目?

eclipse - 在不重新加载页面的情况下将 jsp、css、js、html 的更改反射(reflect)到浏览器

java - UseConcMarkSweepGC 详细 gc 输出显示内存下降

java - 当我们更新操作系统时,Android 的 Build 类会受到影响吗?

java - 为什么 maven-surefire-plugin 会跳过日志消息 "because it has already been run for this configuration"的测试?