Apache Maven
Смотрим внутренности Maven
Apache Maven
Depedency Scope
В Maven зависимости (dependencies) могут иметь различные scope, которые определяют, на каких этапах жизненного цикла сборки проекта зависимость будет доступна.
1
2
3
4
5
6
7
8
<dependencies>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
Scopes
- compile - выбирается по-умолчанию, если не указан.
- Зависимость доступна во всех фазах (компиляция, тестирование, выполнение).
- Включается в итоговый артефакт (например, JAR/WAR).
- provided
- Зависимость требуется для компиляции и тестирования, но не включается в итоговый артефакт.
- Предполагается, что среда выполнения (например, сервер приложений) предоставит её самостоятельно.
- Примеры: Servlet API, Java EE API.
- runtime
- Зависимость не нужна для компиляции, но требуется во время выполнения.
- Включается в итоговый артефакт.
- Пример: JDBC-драйвер (на этапе компиляции используется только интерфейс, а драйвер подключается в runtime).
- test
- Зависимость нужна только для тестирования (компиляция и выполнение тестов).
- Не включается в итоговый артефакт.
- Примеры: JUnit, Mockito.
- system
- Аналогичен provided, но путь к JAR-файлу указывается явно через
. - Не рекомендуется к использованию, так как делает сборку непереносимой.
- Аналогичен provided, но путь к JAR-файлу указывается явно через
Настройка Maven в Idea
Идём Build, Execution, Deployment
-> Build Tools
- Reload project after changes in the build scripts:
- Any changes - автоматически будет подтягивать зависимости (не хорошо для больших проектов)
- External changes - по нажатию
Просмотр наследования зависимостей
1
mvn dependency:help // просмотр goals dependency
Выведет 21 goal, из которых интересны analyze
и tree
mvn dependency:analyze
- покажет статистику по нашим зависимостям. Что можно убрать, что нет.
mvn dependency:tree
- покажет дерево зависимостей, а так же транзитивные зависимости
mvn dependency:tree -Dverbose
- более подробная статистика. Можно увидеть не совместимые зависимости
При конфликте зависмостей можно отключать те или иные зависимости
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId> // уйдёт из spring-mvc
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.1.7.RELEASE</version> // здесь будут bean version 5.1.7
</dependency>
</dependencies>
This post is licensed under CC BY 4.0 by the author.