Apache Maven — это инструмент для управления сборкой Java-проектов, зависимостями и документацией через стандартизированную структуру проекта. Нужно ли вам компилировать Java-приложения, автоматически управлять библиотеками или интегрироваться с CI/CD-пайплайнами (Jenkins, GitLab CI) — Maven обеспечивает основу для воспроизводимых сборок.
💡 Если вы разрабатываете на Java и хотите автоматизировать сборку, управление зависимостями и тестирование — Maven предоставит стандартизированный подход к сборке проектов.
В этом руководстве мы установим Apache Maven на Rocky Linux 8, 9 и 10. Вы узнаете:
- Как установить Maven через DNF (простой способ)
- Как установить последнюю версию Maven из бинарного архива
- Как настроить переменные окружения
- Как создать и собрать тестовый проект
- Как обновлять и удалять Maven
Для кого: Java-разработчики (сборка проектов, управление зависимостями), DevOps (интеграция с CI/CD), сисадмины (установка инструментов сборки), новички (первые шаги в Java-разработке).
1. Выбор метода установки
| Метод | Канал | Версия | Обновления | Для кого |
|---|---|---|---|---|
| DNF | Репозитории Rocky | 3.9.9 (Rocky 10), 3.6.3 (Rocky 9), 3.5.4 (Rocky 8) | Автоматические через dnf upgrade | Большинство пользователей, нужны стабильные пакеты |
| Ручная установка | Apache Downloads | Последняя стабильная | Требуется ручное обновление | Пользователи, которым нужны новейшие функции Maven |
💡 Вывод для новичка: Для большинства пользователей подходит установка через DNF — она даёт автоматические обновления безопасности и сама устанавливает зависимости (JDK). Ручная установка нужна только если вам требуются функции из последней версии Maven.
⚠️ Важно: Maven требует установленный JDK (Java Development Kit). При установке через DNF JDK подтянется автоматически. При ручной установке JDK нужно установить отдельно.
2. Подготовка системы
2.1 Обновление системы
sudo dnf upgrade --refresh -y
Что делает:
sudo— права суперпользователя.dnf upgrade— обновляет все пакеты до последних версий.--refresh— принудительно перекачивает метаданные репозиториев (игнорирует кэш).-y— автоматически отвечает «yes».
Зачем: Это стандартная практика безопасности перед установкой нового ПО. Снижает риск конфликтов зависимостей.
3. Метод 1: Установка Maven через DNF (рекомендовано)
3.1 Установка Maven и JDK
sudo dnf install -y maven java-21-openjdk-devel
Что делает:
maven— сам Maven (менеджер сборки)java-21-openjdk-devel— JDK 21 (компиляторjavacи среда выполнения)
Зачем: Maven использует javac для компиляции Java-кода. Без JDK сборка проектов будет невозможна.
💡 Другие версии JDK: Если ваш проект требует определённую версию Java, замените java-21-openjdk-devel на java-17-openjdk-devel или java-11-openjdk-devel. Все эти версии доступны на Rocky Linux 8, 9 и 10.
3.2 Проверка установки Maven
mvn -version
✅ Ожидаемый вывод для Rocky 10:
Apache Maven 3.9.9 (Red Hat 3.9.9-3)
Maven home: /usr/share/maven
Java version: 21.0.9, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-21-openjdk
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "6.6.87.2-microsoft-standard-wsl2", arch: "amd64", family: "unix"
✅ Ожидаемый вывод для Rocky 9:
Apache Maven 3.6.3 (Red Hat 3.6.3-5)
Maven home: /usr/share/maven
Java version: 17.0.x, vendor: Red Hat, Inc.
...
✅ Ожидаемый вывод для Rocky 8:
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 1.8.0_xxx, vendor: Red Hat, Inc.
...
Зачем: Убедиться, что Maven установился и использует правильную версию Java.
3.3 Проверка компилятора Java
javac -version
✅ Ожидаемый вывод (Rocky 10):
javac 21.0.9
4. Метод 2: Ручная установка Maven из архива (последняя версия)
Этот метод даёт доступ к самой свежей версии Maven (например, 3.9.12), которая может отсутствовать в репозиториях Rocky Linux.
4.1 Установка JDK и утилит
sudo dnf install -y java-21-openjdk-devel tar curl
Что делает: Устанавливает JDK, tar (для распаковки) и curl (для скачивания).
4.2 Проверка Java
java -version
✅ Ожидаемый вывод (Rocky 10):
openjdk version "21.0.9" 2025-10-21 LTS
OpenJDK Runtime Environment (Red_Hat-21.0.9.0.10-1) (build 21.0.9+10-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-21.0.9.0.10-1) (build 21.0.9+10-LTS, mixed mode, sharing)
4.3 Скачивание последней версии Maven
cd /tmp
MAVEN_VERSION=$(curl -fsSL https://api.github.com/repos/apache/maven/releases/latest | grep -oP '"tag_name": "maven-\K[^"]+')
if [ -z "$MAVEN_VERSION" ]; then
echo "Error: Could not determine the latest Maven version."
else
echo "Downloading Maven ${MAVEN_VERSION}..."
curl -fL --progress-bar "https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" -o "apache-maven-${MAVEN_VERSION}-bin.tar.gz"
fi
Что делает: Определяет последнюю версию Maven через GitHub API и скачивает архив.
✅ Ожидаемый вывод:
Downloading Maven 3.9.12...
######################################################################## 100.0%
4.4 (Опционально) Проверка контрольной суммы
curl -fL --progress-bar "https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz.sha512" -o "apache-maven-${MAVEN_VERSION}-bin.tar.gz.sha512"
echo "$(cat apache-maven-${MAVEN_VERSION}-bin.tar.gz.sha512) apache-maven-${MAVEN_VERSION}-bin.tar.gz" | sha512sum -c -
✅ Ожидаемый вывод:
apache-maven-3.9.12-bin.tar.gz: OK
4.5 Распаковка в /opt
sudo tar xzf "apache-maven-${MAVEN_VERSION}-bin.tar.gz" -C /opt/
4.6 Создание символической ссылки
sudo ln -sfn /opt/apache-maven-${MAVEN_VERSION} /opt/maven
Что делает: Создаёт ссылку /opt/maven → /opt/apache-maven-3.9.12. При обновлении достаточно будет поменять ссылку.
4.7 Настройка переменных окружения
sudo tee /etc/profile.d/maven.sh >/dev/null <<'EOF'
export M2_HOME=/opt/maven
export PATH="${M2_HOME}/bin:${PATH}"
EOF
Что делает: Создаёт скрипт, который устанавливает переменные M2_HOME и добавляет mvn в PATH при каждом входе в систему.
4.8 Применение изменений
source /etc/profile
4.9 Проверка установки
command -v mvn
mvn -version
✅ Ожидаемый вывод:
/opt/maven/bin/mvn
Apache Maven 3.9.12 (848fbb4bf2d427b72bdb2471c22fced7ebd9a7a1)
Maven home: /opt/maven
Java version: 21.0.9, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-21-openjdk
...
javac -version
✅ Ожидаемый вывод:
javac 21.0.9
5. Создание тестового проекта
5.1 Генерация проекта
mvn archetype:generate -DgroupId=com.example.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Что делает: Создаёт проект my-app со стандартной структурой Maven и примером кода.
5.2 Сборка проекта
cd my-app
mvn package
✅ Ожидаемый вывод в конце:
[INFO] Building jar: /tmp/my-app/target/my-app-1.0-SNAPSHOT.jar
[INFO] BUILD SUCCESS
5.3 Запуск приложения
java -cp target/my-app-1.0-SNAPSHOT.jar com.example.app.App
✅ Ожидаемый вывод:
Hello World!
Зачем: Убедиться, что Maven работает корректно и может собирать и запускать Java-проекты.
6. Обновление Maven
6.1 Обновление DNF-установки
sudo dnf upgrade --refresh maven
6.2 Обновление ручной установки
Скрипт автоматического обновления:
Создайте файл ~/update-maven.sh:
cat <<'EOF' > ~/update-maven.sh
#!/bin/bash
set -e
for cmd in curl tar grep sha512sum; do
if ! command -v "$cmd" >/dev/null 2>&1; then
echo "Error: $cmd is required but not installed."
exit 1
fi
done
echo "Checking for Maven updates..."
CURRENT_VERSION=$(mvn -version 2>/dev/null | grep -oP 'Apache Maven \K[0-9.]+' || echo "not installed")
if ! LATEST_VERSION=$(curl -fsSL https://api.github.com/repos/apache/maven/releases/latest | grep -oP '"tag_name": "maven-\K[^"]+'); then
echo "Error: Could not fetch the latest version from GitHub."
exit 1
fi
echo "Current installed version: $CURRENT_VERSION"
echo "Latest available version: $LATEST_VERSION"
echo ""
if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
echo "Already up to date."
exit 0
fi
read -p "Continue with update? (y/n) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Update cancelled."
exit 0
fi
echo ""
echo "Downloading Maven $LATEST_VERSION..."
cd /tmp
curl -fL --progress-bar "https://dlcdn.apache.org/maven/maven-3/${LATEST_VERSION}/binaries/apache-maven-${LATEST_VERSION}-bin.tar.gz" -o "apache-maven-${LATEST_VERSION}-bin.tar.gz"
curl -fL --progress-bar "https://dlcdn.apache.org/maven/maven-3/${LATEST_VERSION}/binaries/apache-maven-${LATEST_VERSION}-bin.tar.gz.sha512" -o "apache-maven-${LATEST_VERSION}-bin.tar.gz.sha512"
echo "Verifying SHA512 checksum..."
echo "$(cat apache-maven-${LATEST_VERSION}-bin.tar.gz.sha512) apache-maven-${LATEST_VERSION}-bin.tar.gz" | sha512sum -c -
echo "Extracting to /opt/..."
sudo tar xzf "apache-maven-${LATEST_VERSION}-bin.tar.gz" -C /opt/
echo "Updating symbolic link..."
sudo ln -sfn "/opt/apache-maven-${LATEST_VERSION}" /opt/maven
rm -f "apache-maven-${LATEST_VERSION}-bin.tar.gz" "apache-maven-${LATEST_VERSION}-bin.tar.gz.sha512"
echo ""
echo "Update complete!"
mvn -version
EOF
Делаем скрипт исполняемым и запускаем:
chmod +x ~/update-maven.sh
~/update-maven.sh
⚠️ Важно: Не автоматизируйте обновление Maven через cron. Сначала изучите изменения в новой версии и протестируйте сборку проекта.
7. Диагностика проблем
7.1 Ошибка: «JAVA_HOME is not defined correctly»
Текст ошибки:
The JAVA_HOME environment variable is not defined correctly
Решение:
echo "export JAVA_HOME=/usr/lib/jvm/java-21-openjdk" | sudo tee /etc/profile.d/java-home.sh
source /etc/profile
mvn -version
7.2 Ошибка: «mvn: command not found» после ручной установки
Решение:
source /etc/profile
# или откройте новый терминал
7.3 Rocky Linux 8 показывает Java 8 вместо новой версии
Причина: Maven из DNF на Rocky 8 по умолчанию использует Java 8.
Решение:
sudo alternatives --config java
# выберите номер с Java 11 или 17
echo "export JAVA_HOME=/usr/lib/jvm/java-11-openjdk" | sudo tee /etc/profile.d/java-home.sh
source /etc/profile
mvn -version
8. Удаление Maven
8.1 Удаление DNF-установки
sudo dnf remove maven -y
sudo dnf autoremove -y
8.2 Удаление ручной установки
sudo rm -rf /opt/apache-maven-*
sudo rm -f /opt/maven
sudo rm -f /etc/profile.d/maven.sh
8.3 Удаление пользовательских данных (опционально)
rm -rf ~/.m2
8.4 Проверка удаления
command -v mvn || echo "mvn not found"
✅ Ожидаемый вывод:
mvn not found
Чек-лист: всё готово к работе
# 1. Проверка версии Maven
mvn -version
# 2. Проверка версии Java
javac -version
# 3. Проверка JAVA_HOME (должна быть установлена)
echo $JAVA_HOME
# 4. Проверка, какой Maven используется (для ручной установки)
command -v mvn
# 5. Тест: создание и сборка проекта
mvn archetype:generate -DgroupId=com.test -DartifactId=test-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false && cd test-app && mvn package && java -cp target/test-app-1.0-SNAPSHOT.jar com.test.App && cd .. && rm -rf test-app
Заключение
Вы установили Apache Maven на Rocky Linux через DNF или вручную из архива.
Что теперь есть в системе:
- ✅ Maven (стабильная версия из DNF или последняя из архива)
- ✅ JDK для компиляции Java-кода
- ✅ Настроенные переменные окружения (при ручной установке)
- ✅ Возможность собирать Java-проекты и управлять зависимостями
Что дальше:
- Изучите файл
pom.xml— сердце любого Maven-проекта - Настройте Maven для работы с корпоративным репозиторием (Nexus, Artifactory)
- Интегрируйте Maven с CI/CD (Jenkins, GitLab CI)
- Для контроля версий используйте Git — установите его по нашей инструкции