Situatie
Instalati Apache Maven pe Fedora 44 cu pachetul DNF pentru actualizari gestionate de Fedora, sau cu tarball-ul oficial cand un proiect necesita o versiune Maven 3 mai noua sub /opt. Fluxul de lucru include verificari Java, un build de test quickstart, actualizari manuale sau prin helper pentru tarball, curatarea cache-ului, configurarea proxy si eliminare.
Alegerea metodei de instalare Maven
| Metoda | Sursa sau canalul | Comportament actualizari | Potrivit pentru | Compromisuri |
|---|---|---|---|---|
| Pachet DNF | Pachetul Fedora maven | Actualizat cu upgrade-uri DNF normale | Majority workstation-uri, servere si hosturi CI Fedora | Poate ramane in urma versiunii Maven 3 recomandate de Apache |
| Tarball oficial | Apache Maven downloads | Actualizare manuala verificata sau helper optional update-maven | Cea mai noua versiune upstream Maven 3 sau versiuni fixate de proiect | Necesita configurarea PATH si gestionare manuala a ciclului de viata |
Reimprospatarea Fedora inainte de instalarea Maven
Reimprospatati metadatele repository-ului si aplicati actualizarile de pachete in asteptare inainte de a instala Maven:
sudo dnf upgrade --refresh
Solutie
Pasi de urmat
Metoda 1: Instalarea Apache Maven cu DNF
Instalati Maven din repository-urile implicite Fedora:
sudo dnf install maven
Fedora rezolva dependentele Java ale Maven in timpul tranzactiei. Pe metadatele pachetelor Fedora 44, pachetul Maven foloseste binding-ul maven-openjdk25 si instaleaza java-25-openjdk-devel cand JDK-ul corespunzator nu este deja prezent.
Confirmati RPM-urile instalate cand doriti dovada la nivel de pachet:
rpm -q maven maven-openjdk25 java-25-openjdk-devel
Exemplu de output Fedora 44:
maven-3.9.11-11.fc44.noarch
maven-openjdk25-3.9.11-11.fc44.noarch
java-25-openjdk-devel-25.0.3.0.9-2.fc44.x86_64
Verificati binarul Maven activ si runtime-ul Java:
mvn -version
Maven home trebuie sa pointeze catre locatia ambalata de Fedora:
Apache Maven 3.9.11 (Red Hat 3.9.11-11)
Maven home: /usr/share/maven
Java version: 25.0.3, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-25-openjdk
Default locale: en_AU, platform encoding: UTF-8
OS name: "linux", version: "7.0.6-200.fc44.x86_64", arch: "amd64", family: "unix"
Metoda 2: Instalarea Apache Maven din tarball-ul oficial
Metoda tarball instaleaza Maven sub /opt si foloseste fisierul de checksum Apache pentru a verifica arhiva descarcata inainte de extractie.
ATENTIE: Nu instalati ambele metode cu exceptia cazului in care intentionati sa aveti un Maven ambalat sub /usr/bin si un Maven gestionat manual sub /opt. Comanda care castiga depinde de ordinea din $PATH.
Instalarea Java si a instrumentelor de download pentru Maven
Instalati pachetul de dezvoltare OpenJDK si instrumentele de download necesare fluxului de lucru tarball:
sudo dnf install java-25-openjdk-devel curl tar gzip
NOTA: Maven 3.9 ruleaza pe JDK 8 sau mai nou, dar un JDK complet ramane alegerea practica pentru hosturile de build Fedora deoarece proiectele Maven necesita adesea javac, jar si instrumente de dezvoltare aferente.
Detectarea versiunii curente Apache Maven 3
Folositi pagina de download Maven a Apache ca sursa de versiune si extrageti versiunea curenta a tarball-ului binar Maven 3:
MAVEN_VERSION=
MAVEN_PAGE=
if cd /tmp; then
MAVEN_PAGE=$(curl -fsSL https://maven.apache.org/download.cgi)
MAVEN_VERSION=$(printf '%s\n' "$MAVEN_PAGE" | grep -oE 'apache-maven-3\.[0-9.]+-bin\.tar\.gz' | sed -E 's/apache-maven-([0-9.]+)-bin\.tar\.gz/\1/' | sort -Vu | tail -n 1)
fi
if [ -n "$MAVEN_VERSION" ]; then
printf 'Maven version: %s\n' "$MAVEN_VERSION"
else
echo "Could not detect the current Maven 3 release." >&2
fi
Continuati doar dupa ce comanda afiseaza o versiune, deoarece pasii de download reutilizeaza aceeasi variabila in aceeasi sesiune de terminal.
Descarcarea si verificarea tarball-ului Maven
Descarcati arhiva binara si checksum-ul sau SHA-512 de la Apache:
curl -fsSLO "https://dlcdn.apache.org/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz"
curl -fsSLO "https://downloads.apache.org/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz.sha512"
Fisierul SHA-512 al Apache contine doar hash-ul, deci asociati-l cu numele fisierului local inainte de a rula sha512sum:
printf '%s apache-maven-%s-bin.tar.gz\n' "$(cat "apache-maven-$MAVEN_VERSION-bin.tar.gz.sha512")" "$MAVEN_VERSION" | sha512sum -c -
O verificare reusita afiseaza un rezultat OK pentru arhiva descarcata:
apache-maven-3.9.16-bin.tar.gz: OK
Extragerea Maven sub /opt
Extrageti arhiva verificata si pointati /opt/maven catre versiunea activa:
sudo tar -xzf "apache-maven-$MAVEN_VERSION-bin.tar.gz" -C /opt
sudo ln -sfn "/opt/apache-maven-$MAVEN_VERSION" /opt/maven
NOTA: Symlink-ul permite actualizarilor viitoare prin tarball sa comute versiunile Maven fara a rescrie fiecare profil shell.
Adaugarea Maven in PATH-ul sistemului
Creati un script de profil care face disponibil binarul Maven instalat manual in shell-urile noi de login:
sudo tee /etc/profile.d/maven.sh > /dev/null <<'EOF'
if [ -d /opt/maven/bin ]; then
case ":$PATH:" in
*:/opt/maven/bin:*) ;;
*) PATH="/opt/maven/bin:$PATH" ;;
esac
export PATH
fi
EOF
Incarcati scriptul de profil in shell-ul curent sau deschideti o sesiune noua de terminal:
source /etc/profile.d/maven.sh
hash -r
Confirmati ca shell-ul rezolva Maven-ul gestionat prin tarball primul:
command -v mvn
mvn -version | sed -n 's/^Apache Maven \([0-9.]*\).*/Apache Maven \1/p; /^Maven home:/p'
Metoda tarball trebuie sa raporteze Maven home sub /opt:
/opt/maven/bin/mvn
Apache Maven 3.9.16
Maven home: /opt/maven
Compilarea unui proiect Apache Maven de test pe Fedora
Un proiect de test verifica mai mult decat calea comenzii mvn. Confirma ca Maven poate accesa Maven Central, rezolva plugin-uri, creeaza o structura de proiect si produce un JAR:
cd ~
mvn -B archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DgroupId=com.example \
-DartifactId=maven-check \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=1.5 \
-DjavaCompilerVersion=17 \
-DinteractiveMode=false
cd maven-check
mvn -B package
Tratati statusul final al build-ului ca semnal de succes:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Proiectul generat include pom.xml, fisiere de configurare Maven sub .mvn/, fisiere sursa Java sub src/main/java, fisiere de test sub src/test/java si un JAR ambalat sub target/. Eliminati directorul de test cand nu mai aveti nevoie de el:
cd ~
rm -rf maven-check
Gestionarea actualizarilor Apache Maven pe Fedora
Actualizarea Maven instalat cu DNF
Maven gestionat de DNF se actualizeaza odata cu pachetele Fedora:
sudo dnf upgrade --refresh maven
Un upgrade complet al sistemului actualizeaza de asemenea Maven cand Fedora publica un build nou de pachet:
sudo dnf upgrade --refresh
Actualizarea Maven instalat prin tarball
Metoda tarball este in afara package-manager-ului Fedora, deci actualizarile trebuie sa repete detectia versiunii Apache, verificarea checksum-ului, extractia si comutarea symlink-ului /opt/maven.
Actualizare manuala tarball Maven
Blocul manual mentine fiecare pas vizibil si actualizeaza /opt/maven doar cand Apache publica un tarball binar Maven 3 mai nou:
MAVEN_VERSION=
MAVEN_PAGE=
CURRENT_VERSION=
if cd /tmp; then
MAVEN_PAGE=$(curl -fsSL https://maven.apache.org/download.cgi)
MAVEN_VERSION=$(printf '%s\n' "$MAVEN_PAGE" | grep -oE 'apache-maven-3\.[0-9.]+-bin\.tar\.gz' | sed -E 's/apache-maven-([0-9.]+)-bin\.tar\.gz/\1/' | sort -Vu | tail -n 1)
CURRENT_VERSION=$(/opt/maven/bin/mvn -version 2>/dev/null | sed -n 's/^Apache Maven \([0-9.]*\).*/\1/p' | tail -n 1 || true)
else
echo "Could not use /tmp as the download directory." >&2
fi
if [ -z "$MAVEN_VERSION" ]; then
echo "Could not detect the current Maven 3 release." >&2
elif [ "$CURRENT_VERSION" = "$MAVEN_VERSION" ]; then
printf 'Current: %s\nLatest: %s\n' "${CURRENT_VERSION:-none}" "$MAVEN_VERSION"
echo "Maven is already current."
else
printf 'Current: %s\nLatest: %s\n' "${CURRENT_VERSION:-none}" "$MAVEN_VERSION"
curl -fsSLO "https://dlcdn.apache.org/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz"
curl -fsSLO "https://downloads.apache.org/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz.sha512"
printf '%s apache-maven-%s-bin.tar.gz\n' "$(cat "apache-maven-$MAVEN_VERSION-bin.tar.gz.sha512")" "$MAVEN_VERSION" | sha512sum -c -
sudo tar -xzf "apache-maven-$MAVEN_VERSION-bin.tar.gz" -C /opt
sudo ln -sfn "/opt/apache-maven-$MAVEN_VERSION" /opt/maven
hash -r
/opt/maven/bin/mvn -version
fi
Daca tarball-ul instalat este deja curent, blocul manual se opreste inainte de download:
Current: 3.9.16
Latest: 3.9.16
Maven is already current.
Crearea unui helper reutilizabil update-maven
Pentru hosturi de build care folosesc metoda tarball in mod repetat, creati un helper protejat in /usr/local/bin. Setup-ul refuza sa suprascrie o comanda existenta nesemnificativa, apoi scrie scriptul update-maven:
if [ -e /usr/local/bin/update-maven ] && ! grep -q 'LinuxCapable Apache Maven updater' /usr/local/bin/update-maven 2>/dev/null; then
echo "Refusing to overwrite existing /usr/local/bin/update-maven" >&2
false
else
sudo install -d -m 0755 /usr/local/bin
sudo tee /usr/local/bin/update-maven > /dev/null <<'EOF'
#!/usr/bin/env bash
# LinuxCapable Apache Maven updater
set -euo pipefail
install_parent=/opt
link_path=/opt/maven
stage_dir=
work_dir=$(mktemp -d)
cleanup() {
rm -rf "$work_dir"
if [ -n "$stage_dir" ]; then
sudo rm -rf "$stage_dir" >/dev/null 2>&1 || true
fi
}
trap cleanup EXIT
for cmd in curl grep sed sort tail sha512sum tar sudo mktemp java; do
if ! command -v "$cmd" >/dev/null 2>&1; then
echo "Missing required command: $cmd" >&2
exit 1
fi
done
page=$(curl -fsSL https://maven.apache.org/download.cgi)
latest=$(printf '%s\n' "$page" | grep -oE 'apache-maven-3\.[0-9.]+-bin\.tar\.gz' | sed -E 's/apache-maven-([0-9.]+)-bin\.tar\.gz/\1/' | sort -Vu | tail -n 1)
if [ -z "$latest" ]; then
echo "Could not detect the current Maven 3 release." >&2
exit 1
fi
current=$("$link_path/bin/mvn" -version 2>/dev/null | sed -n 's/^Apache Maven \([0-9.]*\).*/\1/p' | tail -n 1 || true)
printf 'Current: %s\nLatest: %s\n' "${current:-none}" "$latest"
if [ "$current" = "$latest" ]; then
echo "Maven is already current."
exit 0
fi
cd "$work_dir"
archive="apache-maven-$latest-bin.tar.gz"
checksum="$archive.sha512"
curl -fsSLO "https://dlcdn.apache.org/maven/maven-3/$latest/binaries/$archive"
curl -fsSLO "https://downloads.apache.org/maven/maven-3/$latest/binaries/$checksum"
printf '%s %s\n' "$(cat "$checksum")" "$archive" | sha512sum -c -
target_dir="$install_parent/apache-maven-$latest"
if [ -e "$target_dir" ] && [ ! -x "$target_dir/bin/mvn" ]; then
echo "$target_dir exists but does not contain bin/mvn; refusing to overwrite it." >&2
exit 1
fi
if [ ! -x "$target_dir/bin/mvn" ]; then
stage_dir=$(sudo mktemp -d -p "$install_parent" ".apache-maven-$latest.XXXXXX")
sudo tar -xzf "$archive" -C "$stage_dir" --strip-components=1
sudo test -x "$stage_dir/bin/mvn"
sudo chmod -R a+rX "$stage_dir"
sudo mv -T "$stage_dir" "$target_dir"
stage_dir=
fi
if [ -e "$link_path" ] && [ ! -L "$link_path" ]; then
echo "$link_path exists and is not a symlink; refusing to replace it." >&2
exit 1
fi
sudo ln -sfn "$target_dir" "$link_path"
hash -r
"$link_path/bin/mvn" -version
EOF
sudo chmod 0755 /usr/local/bin/update-maven
command -v update-maven
fi
Comanda finala trebuie sa afiseze calea helper-ului:
/usr/local/bin/update-maven
Rulati helper-ul manual cand sunteti gata sa verificati un update Maven 3 upstream:
update-maven
Cand un update upstream este disponibil, primele doua linii difera, linia de checksum trebuie sa se termine cu OK, iar output-ul final Maven trebuie sa raporteze in continuare /opt/maven ca Maven home:
Current: 3.9.15
Latest: 3.9.16
apache-maven-3.9.16-bin.tar.gz: OK
Apache Maven 3.9.16
Maven home: /opt/maven
Depanare probleme Apache Maven pe Fedora
Comanda Maven nu este gasita
Daca mvn lipseste dupa o instalare DNF, confirmati ca pachetul este instalat:
rpm -q maven
command -v mvn
Daca RPM-ul este instalat dar comanda lipseste, reinstalati pachetul:
sudo dnf reinstall maven
Pentru instalatiile tarball, confirmati ca scriptul de profil exista si incarcati-l in shell-ul curent:
cat /etc/profile.d/maven.sh
source /etc/profile.d/maven.sh
command -v mvn
Daca command -v mvn nu returneaza nimic, deschideti o sesiune noua de terminal si verificati ca /opt/maven/bin apare inaintea oricarei cai Maven mai vechi in $PATH.
Maven foloseste versiunea Java gresita
Verificati binarul Java pe care Maven il vede si comparati-l cu linia de runtime Maven:
readlink -f "$(command -v java)"
mvn -version
Daca sunt instalate mai multe JDK-uri, comutati atat runtime-ul cat si alternativele compilator astfel incat Maven si javac sa ramana aliniate:
sudo alternatives --config java
sudo alternatives --config javac
Unele plugin-uri citesc de asemenea JAVA_HOME. Derivati-l din binarul Java activ in loc sa codificati o cale invechita:
JAVA_HOME=$(dirname "$(dirname "$(readlink -f "$(command -v java)")")")
printf 'export JAVA_HOME=%s\n' "$JAVA_HOME" | sudo tee /etc/profile.d/java-home.sh > /dev/null
source /etc/profile.d/java-home.sh
printf '%s\n' "$JAVA_HOME"
Download-urile de dependente Maven esueaza sau folosesc cache invechit
Din directorul proiectului care contine pom.xml, fortati Maven sa verifice din nou repository-urile remote inainte de a sterge ceva:
cd /path/to/your-project
mvn -U clean package
Daca un cache de dependente este corupt, rulati purge-ul de dependente Maven din aceeasi radacina de proiect:
mvn dependency:purge-local-repository
Stergerea ~/.m2/repository elimina dependentele descarcate pentru contul Linux. Pastrati codul sursa al proiectului si fisierele private de setari intacte cu exceptia cazului in care intentionati o resetare completa Maven:
rm -rf ~/.m2/repository
Recompilati proiectul dupa curatarea cache-ului pentru ca Maven sa descarce artefacte noi:
mvn -U clean package
Maven necesita un proxy pentru download-uri
Retelele corporative necesita adesea ca Maven sa foloseasca un proxy HTTP inainte de a putea accesa Maven Central. Creati un fisier de setari la nivel de utilizator si inlocuiti host-ul si portul cu detaliile proxy-ului organizatiei:
mkdir -p ~/.m2
cat > ~/.m2/settings.xml <<'EOF'
<settings>
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host>proxy.example.com</host>
<port>8080</port>
</proxy>
</proxies>
</settings>
EOF
Testati cu o comanda care trebuie sa contacteze Maven Central:
mvn -U help:effective-settings
URL-urile vechi de download Maven returneaza 404
CDN-ul principal Apache poarta activele versiunii curente, deci URL-urile directe mai vechi precum apache-maven-3.9.6-bin.zip pot inceta sa functioneze de la dlcdn.apache.org. Folositi arhiva Apache Maven 3 cand trebuie sa recuperati o versiune veche pentru testarea compatibilitatii si preferati pagina de download curenta pentru instalatiile normale Fedora.
Eliminarea Maven instalat cu DNF
Eliminati pachetul Fedora Maven cu DNF:
sudo dnf remove maven
DNF poate raporta dependente Java sau biblioteci Maven neutilizate dupa eliminare. Revizuiti tranzactia cu atentie inainte de a confirma o curatare autoremove:
sudo dnf autoremove
Verificati ca pachetul a disparut:
if rpm -q maven > /dev/null 2>&1; then
echo "maven is still installed"
else
echo "maven is not installed"
fi
maven is not installed
Eliminarea Maven instalat prin tarball
Eliminati directorul Maven instalat manual, symlink-ul activ, helper-ul optional de actualizare si scriptul de profil:
sudo rm -rf /opt/apache-maven-* /opt/maven
sudo rm -f /usr/local/bin/update-maven
sudo rm -f /etc/profile.d/maven.sh
hash -r
command -v mvn || echo "mvn command not found"
Daca shell-ul curent rezolva in continuare o cale Maven veche, deschideti o sesiune noua de terminal dupa eliminarea scriptului de profil.
Eliminarea cache-ului Maven si setarilor utilizatorului
ATENTIE: Comanda urmatoare sterge permanent setarile Maven, dependentele descarcate, credentialele stocate in settings.xml si cache-ul local pentru contul Linux curent. Faceti backup la orice credentiale de repository privat sau setari de mirror personalizate inainte de a continua.
rm -rf ~/.m2
Leave A Comment?