Установка Apache Maven на Debian 13, 12, 11: подробное руководство

Apache Maven — это инструмент для управления сборкой Java-проектов, управления зависимостями и документацией. Он используется для автоматизации компиляции, тестирования и упаковки Java-приложений. В Debian Maven можно установить из стандартных репозиториев (проще, но версия старше) или вручную из бинарного архива (актуальная версия с проверкой подписи). Главные сложности для новичка: Maven требует установленный JDK (Java Development Kit), а при ручной установке нужно правильно настроить переменные окружения (M2_HOME и PATH). Также важно понимать, что в разных версиях Debian разные версии Maven и Java (Debian 13 — Maven 3.9.9 + Java 21, Debian 12 — Maven 3.8.7 + Java 17, Debian 11 — Maven 3.6.3 + Java 11).

💡 В этом руководстве вы установите Apache Maven на Debian двумя способами: через APT (рекомендованный для большинства) и ручной установкой (если нужна самая свежая версия с проверкой SHA512 и GPG). Вы также узнаете, как проверить установку на тестовом проекте, настроить прокси и решить типичные проблемы.

В этой статье вы узнаете:

  • Как установить Maven через APT (рекомендовано)
  • Как установить Maven вручную из бинарного архива (актуальная версия с проверкой подписи)
  • Как настроить переменные окружения (M2_HOME, PATH)
  • Как создать и собрать тестовый Maven-проект
  • Как настроить прокси для работы за корпоративным фаерволом
  • Как решить типичные проблемы: JAVA_HOME не задан, mvn: command not found

Для кого: Java-разработчики, DevOps-инженеры, системные администраторы, а также все, кто собирает Java-проекты на Debian 11, 12 или 13.

Оглавление

1. 🔧 Предварительные требования

Перед установкой убедитесь, что:

  • У вас установлена Debian 11, 12 или 13
  • Подключение к интернету стабильно
  • У вас есть права sudo

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo whoami

Что делает: sudo выполняет команду от имени суперпользователя, whoami показывает имя текущего пользователя.

Зачем: Эта команда проверяет, есть ли у вас права sudo. Без них вы не сможете устанавливать пакеты.

✅ Если выводит root — всё в порядке, можете продолжать.

❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.

1.1 Обновление системы

sudo apt update && sudo apt upgrade -y

Что делает: Обновляет список пакетов и устанавливает последние обновления.

2. 📊 Сравнение способов установки Maven

В Debian есть два основных способа установки Maven. Вот их сравнение:

МетодОткудаВерсияОбновленияПлюсыМинусы
APT
рекомендовано
Репозитории
Debian
Debian 13: 3.9.9,
Debian 12: 3.8.7,
Debian 11: 3.6.3
Автоматически
через
apt upgrade
Простота,
автоматические
обновления
Версии старые,
особенно на
Debian 11
Ручная
установка
Официальный
сайт Apache
Последняя
стабильная
Вручную
(скрипт с
проверкой
SHA512/GPG)
Самая свежая
версия,
проверка
подписи
Требует
ручного
обновления и
настройки PATH

💡 Рекомендация: Для большинства пользователей подойдёт APT. Ручную установку выбирайте, если вам нужна самая свежая версия Maven или специфическая версия, которой нет в репозиториях.

3. 📦 Способ 1: Установка Maven через APT (рекомендованный)

Этот способ подходит для большинства пользователей. Вы получаете версию Maven, протестированную для вашего выпуска Debian.

3.1 Установка Maven и JDK

sudo apt install maven default-jdk -y

Что делает: Устанавливает Maven и JDK (Java Development Kit) по умолчанию.

3.2 Проверка версии и пути

command -v mvn
mvn -version
javac -version

Ожидаемый вывод в терминале (Debian 13):

/usr/bin/mvn
Apache Maven 3.9.9
Maven home: /usr/share/maven
Java version: 21.0.9, vendor: Debian, runtime: /usr/lib/jvm/java-21-openjdk-amd64
javac 21.0.9

Какие версии в разных Debian:

Версия DebianВерсия MavenВерсия Java
Debian 13 (Trixie)3.9.921
Debian 12 (Bookworm)3.8.717
Debian 11 (Bullseye)3.6.311

4. 📦 Способ 2: Ручная установка Maven (актуальная версия)

Этот способ подходит, если вам нужна самая свежая версия Maven с проверкой SHA512 и GPG-подписи.

4.1 Установка JDK и зависимостей

sudo apt install default-jdk ca-certificates curl gpg -y

4.2 Определение последней версии и скачивание с проверкой

cd /tmp

# Определение версии с официального сайта
MAVEN_VERSION=$(curl -fsSL https://maven.apache.org/download.cgi | grep -oE 'apache-maven-[0-9]+\.[0-9]+\.[0-9]+-bin\.tar\.gz' | sed -E 's/apache-maven-([0-9.]+)-bin\.tar\.gz/\1/' | sort -Vu | tail -n 1)

if [ -z "$MAVEN_VERSION" ]; then
    echo "Ошибка: не удалось определить версию Maven"
    exit 1
fi

echo "Версия Maven: $MAVEN_VERSION"

# Скачивание архива, контрольной суммы и подписи
MAVEN_ARCHIVE="apache-maven-${MAVEN_VERSION}-bin.tar.gz"
curl -fsSL -o "$MAVEN_ARCHIVE" "https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/${MAVEN_ARCHIVE}"
curl -fsSL -o "${MAVEN_ARCHIVE}.sha512" "https://downloads.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/${MAVEN_ARCHIVE}.sha512"
curl -fsSL -o "${MAVEN_ARCHIVE}.asc" "https://downloads.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/${MAVEN_ARCHIVE}.asc"
curl -fsSL -o maven-KEYS "https://downloads.apache.org/maven/KEYS"

4.3 Проверка SHA512 и GPG-подписи

# Проверка SHA512
echo "Проверка SHA512..."
if printf '%s  %s\n' "$(cat "${MAVEN_ARCHIVE}.sha512")" "$MAVEN_ARCHIVE" | sha512sum -c -; then
    echo "SHA512: OK"
else
    echo "Ошибка: контрольная сумма не совпадает"
    exit 1
fi

# Проверка GPG-подписи
echo "Проверка GPG-подписи..."
GNUPGHOME=$(mktemp -d)
export GNUPGHOME
chmod 700 "$GNUPGHOME"
if gpg --batch --import maven-KEYS && gpg --batch --verify "${MAVEN_ARCHIVE}.asc" "$MAVEN_ARCHIVE"; then
    echo "GPG-подпись: OK"
    rm -rf "$GNUPGHOME"
    unset GNUPGHOME
else
    rm -rf "$GNUPGHOME"
    unset GNUPGHOME
    echo "Ошибка: GPG-подпись не совпадает"
    exit 1
fi

Ожидаемый вывод:

apache-maven-3.9.16-bin.tar.gz: OK
gpg: Good signature from "Slawomir Jaranowski <sjaranowski@apache.org>"

4.4 Распаковка в /opt и создание символической ссылки

sudo tar xzf "$MAVEN_ARCHIVE" -C /opt/
sudo ln -sfn "/opt/apache-maven-${MAVEN_VERSION}" /opt/maven
readlink -f /opt/maven

4.5 Настройка переменных окружения

sudo tee /etc/profile.d/maven.sh >/dev/null <<'EOF'
export M2_HOME=/opt/maven
export PATH="${M2_HOME}/bin:${PATH}"
EOF

source /etc/profile

Что делает: Создаёт файл maven.sh в /etc/profile.d/, который устанавливает переменные M2_HOME и PATH для всех пользователей.

4.6 Проверка установки

command -v mvn
printf 'M2_HOME=%s\n' "$M2_HOME"
mvn -version

Ожидаемый вывод:

/opt/maven/bin/mvn
M2_HOME=/opt/maven
Apache Maven 3.9.16 (...)
Java version: 21.0.9, vendor: Debian, runtime: /usr/lib/jvm/java-21-openjdk-amd64

4.7 Создание скрипта для обновления

sudo tee /usr/local/sbin/update-apache-maven >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

need_cmd() {
  if ! command -v "$1" >/dev/null 2>&1; then
    printf 'Missing required command: %s\n' "$1" >&2
    exit 1
  fi
}

for cmd in curl gpg sha512sum tar; do
  need_cmd "$cmd"
done

if [ "$(id -u)" -ne 0 ]; then
  printf 'Run this updater with sudo: sudo /usr/local/sbin/update-apache-maven\n' >&2
  exit 1
fi

if [ -e /opt/maven ] && [ ! -L /opt/maven ]; then
  printf '/opt/maven exists but is not a symlink; move it before updating.\n' >&2
  exit 1
fi

current_version=""
if [ -x /opt/maven/bin/mvn ]; then
  current_version=$(/opt/maven/bin/mvn -version | awk '/^Apache Maven / {print $3; exit}')
fi

latest_version=$(curl -fsSL https://maven.apache.org/download.cgi | grep -oE 'apache-maven-[0-9]+\.[0-9]+\.[0-9]+-bin\.tar\.gz' | sed -E 's/apache-maven-([0-9.]+)-bin\.tar\.gz/\1/' | sort -Vu | tail -n 1)

if [ -z "$latest_version" ]; then
  printf 'Could not determine the current Maven 3 release.\n' >&2
  exit 1
fi

if [ "$current_version" = "$latest_version" ]; then
  printf 'Apache Maven %s is already installed at /opt/maven.\n' "$latest_version"
  exit 0
fi

workdir=$(mktemp -d)
cleanup() { rm -rf "$workdir"; }
trap cleanup EXIT

archive="apache-maven-${latest_version}-bin.tar.gz"
base_url="https://downloads.apache.org/maven/maven-3/${latest_version}/binaries"
download_url="https://dlcdn.apache.org/maven/maven-3/${latest_version}/binaries/${archive}"

printf 'Downloading Apache Maven %s...\n' "$latest_version"
curl -fsSLo "$workdir/$archive" "$download_url"
curl -fsSLo "$workdir/${archive}.sha512" "$base_url/${archive}.sha512"
curl -fsSLo "$workdir/${archive}.asc" "$base_url/${archive}.asc"
curl -fsSLo "$workdir/maven-KEYS" "https://downloads.apache.org/maven/KEYS"

cd "$workdir"
printf 'Verifying SHA-512 checksum...\n'
printf '%s  %s\n' "$(cat "${archive}.sha512")" "$archive" | sha512sum -c -

printf 'Verifying Apache release signature...\n'
GNUPGHOME="$workdir/gnupg"
export GNUPGHOME
mkdir -p "$GNUPGHOME"
chmod 700 "$GNUPGHOME"
gpg --batch --import maven-KEYS
gpg --batch --verify "${archive}.asc" "$archive"
unset GNUPGHOME

printf 'Installing Apache Maven %s under /opt...\n' "$latest_version"
tar xzf "$archive" -C /opt/
ln -sfn "/opt/apache-maven-${latest_version}" /opt/maven
/opt/maven/bin/mvn -version | head -3
printf 'Apache Maven %s is active at /opt/maven.\n' "$latest_version"
EOF

sudo chmod 755 /usr/local/sbin/update-apache-maven

Запуск обновления:

sudo /usr/local/sbin/update-apache-maven

5. 🧪 Проверка установки: тестовый проект

5.1 Создание проекта

mvn archetype:generate -DgroupId=com.example.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
cd my-app

5.2 Сборка проекта

mvn package

Что делает: Компилирует, тестирует и упаковывает проект в JAR-файл.

5.3 Запуск приложения

java -cp target/my-app-1.0-SNAPSHOT.jar com.example.app.App

Ожидаемый вывод: Hello World!

6. ⚙️ Настройка прокси (если нужно)

Если Maven не может скачать зависимости за корпоративным прокси, настройте прокси в ~/.m2/settings.xml.

mkdir -p ~/.m2
tee ~/.m2/settings.xml > /dev/null <<EOF
<settings>
  <proxies>
    <proxy>
      <id>corporate-proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.example.com</host>
      <port>8080</port>
    </proxy>
  </proxies>
</settings>
EOF

Замените proxy.example.com и 8080 на адрес и порт вашего прокси-сервера.

7. ⚠️ Решение типичных проблем

7.1 Ошибка: JAVA_HOME not set

Симптом: При запуске mvn появляется ошибка:

The JAVA_HOME environment variable is not defined correctly

Пошаговое решение:

Шаг 1: Найдите путь к Java:

readlink -f /usr/bin/java

Шаг 2: Установите JAVA_HOME глобально:

echo "export JAVA_HOME=/usr/lib/jvm/default-java" | sudo tee /etc/profile.d/java-home.sh
source /etc/profile

Шаг 3: Проверьте:

mvn -version

7.2 Ошибка: mvn: command not found (после ручной установки)

Симптом: mvn -version не работает.

Причина: Переменные окружения не загрузились.

Решение: Перезагрузите профиль или откройте новый терминал:

source /etc/profile

Или проверьте путь:

command -v mvn

7.3 Ошибка: Could not determine the latest Maven version

Симптом: Команда curl не может определить версию.

Решение: Установите версию вручную. Проверьте страницу релизов Maven и скачайте нужную версию:

MAVEN_VERSION=3.9.16

7.4 Ошибка: GPG signature verification failed

Симптом: При проверке GPG-подписи ошибка.

Решение: Убедитесь, что установлен пакет gpg и что ключи Apache загружены корректно. Повторите шаги из раздела 4.2–4.3.

8. 🔄 Обновление Maven

Для APT-установки

sudo apt update
sudo apt install --only-upgrade maven -y

Для ручной установки

sudo /usr/local/sbin/update-apache-maven

9. ❌ Удаление Maven

Удаление APT-версии

sudo apt remove --purge maven -y
sudo apt autoremove -y

Удаление ручной установки

sudo rm -rf /opt/apache-maven-*
sudo rm -f /opt/maven
sudo rm -f /etc/profile.d/maven.sh
sudo rm -f /usr/local/sbin/update-apache-maven

Проверка удаления

command -v mvn

Ожидаемый вывод: Пустая строка.

10. 📝 Чек-лист: всё готово к работе

  • [ ] Система обновлена (sudo apt update && sudo apt upgrade -y)
  • [ ] Выбран и выполнен один из способов установки (APT / ручная)
  • [ ] command -v mvn показывает правильный путь
  • [ ] mvn -version показывает ожидаемую версию
  • [ ] javac -version показывает версию компилятора Java
  • [ ] printf 'M2_HOME=%s\n' "$M2_HOME" показывает правильный путь (для ручной установки)
  • [ ] Тестовый проект создаётся (mvn archetype:generate)
  • [ ] Проект собирается (mvn package без ошибок)
  • [ ] Программа запускается (java -cp ... выводит Hello World!)

Заключение

Вы установили Apache Maven на Debian. Если вы выбрали APT — получили стабильную версию, которая будет обновляться вместе с системой. Если установили вручную — получили самую свежую версию с проверкой SHA512 и GPG-подписи, а также скрипт для автоматического обновления. Maven — это стандартный инструмент для сборки Java-проектов, управления зависимостями и CI/CD. Главное, что нужно запомнить: Maven требует JDK, а не только JRE. Если возникают ошибки с JAVA_HOME, настройте его через файл в /etc/profile.d/. Для работы за прокси настройте ~/.m2/settings.xml.

Что дальше:

  • Изучите официальную документацию Maven
  • Настройте Maven для работы с корпоративным прокси (раздел 6)
  • Интегрируйте Maven с CI/CD (Jenkins, GitLab CI)
  • Установите Git для управления версиями кода
  • Для контейнеризации Java-приложений изучите Docker

Связанные статьи: