Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
В каких случаях использовать Install (в контексте Maven и Java)
Термин "install" в Java-экосистеме относится к Maven life cycle фазе, которая копирует собранный артефакт в локальный репозиторий. Это критический этап в процессе разработки.
Что такое Maven install?
mvn install выполняет следующие шаги:
- Компилирует исходный код
- Запускает тесты
- Создает JAR/WAR/другой артефакт
- Копирует артефакт в локальный репозиторий (~/.m2/repository)
- Делает его доступным для других проектов на локальной машине
Когда использовать mvn install?
1. Разработка с несколькими модулями (Multi-module project)
Когда у тебя есть несколько проектов, которые зависят друг от друга:
my-project/
├── core/ (библиотека)
├── service/ (зависит от core)
└── app/ (зависит от service)
Порядок работы:
# 1. Устанавливаем core в локальный репозиторий
cd core
mvn install
# 2. Теперь service может использовать core
cd ../service
mvn install
# 3. И app может использовать оба
cd ../app
mvn install
2. Создание собственных библиотек
Когда ты разработал утилиту, которую хочешь использовать в разных проектах:
# Сначала разработал и установил библиотеку
mvn install
# Теперь в других проектах можем использовать:
<!-- pom.xml -->
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>my-utils</artifactId>
<version>1.0.0</version>
</dependency>
3. Локальная разработка перед commit
Проверить, что проект собирается и устанавливается корректно:
# Полная сборка с тестами и установкой
mvn clean install
Maven Life Cycle phases
Имей в виду, что install — это только одна из фаз. Порядок выполнения:
mvn compile # Компилирует код
mvn test # Запускает тесты
mvn package # Создает JAR/WAR
mvn install # Копирует в локальный репозиторий
mvn deploy # Загружает на удаленный репозиторий (Nexus, Artifactory)
Когда ты вызываешь mvn install, автоматически выполняются ВСЕ предыдущие фазы:
mvn install
# На самом деле выполняет:
# 1. validate
# 2. compile
# 3. test
# 4. package
# 5. verify
# 6. install
Практические примеры
Пример 1: Разработка с локальными зависимостями
# Структура проектов
/workspace
/my-core-lib
pom.xml (version: 1.0.0)
/my-app
pom.xml (зависит от my-core-lib)
# Процесс разработки
cd /workspace/my-core-lib
mvn install # Копирует my-core-lib-1.0.0.jar в ~/.m2/repository
cd /workspace/my-app
mvn compile # Теперь может найти my-core-lib в локальном репозитории
Пример 2: Быстрая сборка без тестов (skipTests)
# Если хочешь установить без запуска тестов
mvn install -DskipTests
# Или пропустить компиляцию тестов вообще
mvn install -Dmaven.test.skip=true
Пример 3: Чистая сборка (clean install)
# Удаляет target/ и собирает с нуля
mvn clean install
# Это самый надежный способ убедиться, что ничего не закеширован
Install vs Package vs Deploy
| Команда | Действие | Где оказывается артефакт |
|---|---|---|
mvn package | Создает JAR/WAR | ./target/ |
mvn install | Создает + копирует в локальный репо | ~/.m2/repository |
mvn deploy | Создает + копирует на удаленный сервер | Nexus, Artifactory, Maven Central |
Когда НЕ нужен install
1. Если работаешь только с одним проектом
# Достаточно просто packager
mvn package
2. Если используешь IDE (IntelliJ IDEA, Eclipse)
SРЕДА автоматически управляет зависимостями через Maven. Тебе не нужно вручную вызывать install.
3. В CI/CD pipeline для production
Обычно используется deploy вместо install:
# .gitlab-ci.yml или Jenkins
mvn deploy # Загружает на центральный репозиторий
Best practices
# ✅ Перед commit или pull request
mvn clean install
# ✅ При разработке локальной библиотеки
mvn install
# ✅ Если медленные тесты
mvn install -DskipTests
# ❌ Не используй install для production-сборки (используй deploy)
Скрытые издержки install
Когда ты устанавливаешь артефакт в локальный репозиторий, он занимает место на диске:
# Очистить локальный репозиторий (свободить место)
rm -rf ~/.m2/repository/com/mycompany # Удалить конкретный пакет
# Или переустановить с нуля
mvn clean install
Альтернатива: Использование relative path
Вместо install можно использовать relative path в pom.xml:
<!-- В multi-module проекте -->
<modules>
<module>../my-core-lib</module>
<module>../my-service</module>
<module>../my-app</module>
</modules>
<!-- Теперь зависимость найдется напрямую в проекте, без install -->
Вывод
Используй mvn install когда:
- Разрабатываешь несколько независимых проектов с перекрестными зависимостями
- Создаешь переиспользуемую библиотеку
- Хочешь проверить полную сборку перед commit
Для большинства работ в IDE это происходит автоматически, но важно понимать, что происходит под капотом.