Установка Apache Maven на Rocky Linux: полное руководство

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Репозитории Rocky3.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 — установите его по нашей инструкции

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *