【问题标题】:Tomcat Isn't Scanning JARs Within JARsTomcat 不在 JAR 中扫描 JAR
【发布时间】:2020-02-21 16:07:27
【问题描述】:

我有两个 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 文件夹中,以便共享。因此,当我尝试部署任何战争文件时,通过将战争文件复制到 webapps 文件夹并启动 Tomcat,我在启动时看到一堆缺少的 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,但从来没有这么详细过。任何帮助将不胜感激。

【问题讨论】:

  • 您是否需要 jar 是同一个实例,例如在运行时拥有公共变量?
  • @CarlosLópezMarí 你好,是的,我愿意。在运行时由任一 WAR 创建的大量对象需要保存。以前我在每个 WAR 的类路径中都有它,它们都实例化了自己的对象,所以没有任何东西持续存在。
  • 您的意思是您需要更多信息?
  • 我正在将依赖项添加到 tomcat/lib 文件夹中并删除我的 .m2 中的 jar 并且它仍然将源下载到我的存储库中......删除“范围”会阻止依赖项下载和它正在从 lib 文件夹中读取...
  • 可能是阅读权限问题?

标签: java maven tomcat web-applications tomcat9


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-01-23
    • 2013-12-31
    • 2012-10-25
    • 2011-10-10
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2017-02-27
    相关资源
    最近更新 更多