Tomcat не сканирует JAR внутри JAR

У меня есть два веб-приложения (скажем, A.war и B.war), которые используют некоторый общий фрагмент кода (скажем, C.jar) для обмена информацией. Итак, что я сделал в файле POM двух веб-приложений, я добавил JAR с «предоставленной областью».

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

И я скопировал C.jar в папку lib Tomcat, чтобы он был общим. Поэтому, когда я пытаюсь развернуть любой файл войны, скопировав файл войны в папку 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)

Но все файлы JAR, на которые жалуется Tomcat, находятся в папке «lib» C.jar. Есть ли способ заставить Tomcat сканировать JAR-файлы внутри C.jar. Я не уверен, что то, что я делаю, правильно в первую очередь. Раньше я играл с Tomcat/Maven, но никогда не в этих деталях. Любая помощь будет оценена по достоинству.


person hell_storm2004    schedule 25.10.2019    source источник
comment
Вам нужно, чтобы jar был одним и тем же экземпляром, например, для общих переменных во время выполнения?   -  person Carlos López Marí    schedule 25.10.2019
comment
@CarlosLópezMarí Здравствуйте, да. Существует множество объектов, созданных во время выполнения WAR-файлами, которые необходимо сохранить. Раньше у меня было это в каждом пути класса WAR, и все они создавали свои собственные объекты, поэтому ничего не сохранялось.   -  person hell_storm2004    schedule 25.10.2019
comment
Вы имеете в виду, что вам нужно больше информации?   -  person hell_storm2004    schedule 25.10.2019
comment
Я добавляю зависимость в папку tomcat/lib и удаляю jar в моем .m2, и он по-прежнему загружает источник в мой репозиторий... Удаление области действия предотвращает загрузку зависимости, и она читается из папки lib.. .   -  person Carlos López Marí    schedule 25.10.2019
comment
Может проблема с правами на чтение?   -  person Carlos López Marí    schedule 25.10.2019
comment
Файлы WAR не поддерживают банки внутри банок. Вам нужно другое решение.   -  person Thorbjørn Ravn Andersen    schedule 25.10.2019
comment
JAR находятся внутри JAR, а не WAR, C.jar, если быть точным.   -  person hell_storm2004    schedule 25.10.2019
comment
Файлы Jar не могут содержать файлы Jar без серьезной работы с загрузчиком классов. Это просто не сработает.   -  person stdunbar    schedule 25.10.2019


Ответы (1)


У меня для параметра scanManifest в JARScanner установлено значение true в context.xml Tomcat. Я установил его в false, и ошибка исчезла.

<JarScanner scanAllDirectories="true" scanAllFiles="true" scanBootstrapClassPath="true" scanClassPath="true" scanManifest="false" />
person hell_storm2004    schedule 04.11.2019