Как Tomcat загружает зависимости Maven? - PullRequest
0 голосов
/ 25 октября 2018

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

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

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

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

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

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

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

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

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

0 голосов
/ 25 октября 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...