Как tomcat загружает зависимости maven?

Я только начал использовать Maven для одного из моих проектов. Я собираю свой артефакт в качестве файла войны, который я бы развернул в tomcat. Я указал все мои зависимости в файле pom.xml (например: json-databind jar)

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.7</version>
</dependency>

Я мог видеть все мои баны dependecy в моем пути class eclipse, конечно, не было ошибок компиляции или чего-то еще.

После упаковки моего кода в военный файл я попытался проверить его содержимое. Я мог видеть весь исходный файл, но в военном файле не было никаких следов моих зависимостей.

Я развернул войну на локальном сервере tomcat и смог протестировать без ошибок.

Мой вопрос: как tomcat получил банки, от которых зависел мой проект? или tomcat читает pom.xml каждого военного файла и загружает все зависимости?

Всего 2 ответа


Сказанное легко, maven находит для вас все библиотеки, необходимые для работы вашего веб-приложения, следуя тому, что описано в файле pom. Фактически, в добрые времена (!) Все необходимые библиотеки пришлось искать вручную и вставлять в папку / lib, чтобы Webapp работал правильно.

Итак, когда вы запускаете, например, mvn clean install maven, это работает для вас: ищет зависимости, находит правильные файлы jar из репозитория maven, загружает их (при необходимости), затем строит вашу войну, помещая все в нужное место, поэтому, когда. war развернут в папке webapps на Tomcat (а затем распакован сам tomcat), при запуске webapp Java classloader не будет жаловаться.

Извините за действительно упрощенный пример, но я надеюсь уточнить суть.


Сервер Tomcat не отвечает за разрешение зависимостей maven, он используется только для запуска приложения на сервере.

Когда вы строите свой проект, используя mvn clean install, автоматически будут привязаны баны с зависимостями к вашему военному файлу. Не нужно беспокоиться о разрешении зависимостей.

Tomcat сопоставляет этот запрос соответствующему движку для обработки. Эти двигатели содержатся в других элементах, таких как хосты и серверы, которые ограничивают область поиска Tomcat для правильного Engine.

Пользователь вызывает плагин «архетип» с целью «генерировать» для создания проекта Maven указанного типа из стандартной модели для этого типа проекта.

Maven выполняет ряд шагов, связанных с этой целью, проверяя локальные репозитории для зависимостей (как JAR-стандартов Java, так и плагинов Maven), необходимых для создания заданного архетипа. Maven организует эти файлы в каталогах, используя один и тот же макет для каждого проекта. Этот «Стандартный макет каталога» помогает гарантировать, что все проекты Maven будут выглядеть знакомыми для всех пользователей, даже если они построены с использованием разных фреймворков.

Пользователь изменяет конфигурационный файл POM.xml пакета с информацией о конфигурации, соответствующей их проекту. Большие части этого процесса могут быть автоматизированы с помощью других плагинов.

Пользователь вызывает фазу Maven в проекте, такую ​​как компиляция, тестирование или развертывание. Maven автоматически запускает все необходимые предыдущие фазы для достижения запрошенной фазы. Фазы предоставляют абстракцию команды на основе информации, унаследованной от POM. Таким образом, вызов фазы «пакет» в проекте JAR будет выполнять разные шаги, чем вызов той же команды в проекте WAR.

Надеюсь, это поможет.


Есть идеи?

10000