Riešenie konfliktov závislostí v Mavene pomocou dependency:tree


Dátum vydania:

Aktualizované:


Technické články > Riešenie konfliktov závislostí v Mavene pomocou dependency:tree

Stav a bezpečné používanie v roku 2026

Záver: Príkaz mvn dependency:tree zobrazí výsledný strom závislostí a cestu, ktorá priniesla neočakávanú verziu. Deklaráciu opravte vedomou aktualizáciou priamej závislosti, pravidlom v dependencyManagement alebo presne odôvodneným vylúčením.

Čo sa naučíte

  • Ako môže pravidlo „najbližšej definície“ prekryť požadovanú tranzitívnu verziu.
  • Ako podrobný a filtrovaný výstup stromu závislostí pomáha nájsť zdroj konfliktu.
  • Prečo mazanie súborov z lokálneho repozitára ani náhodné vylučovanie závislostí nie je trvalým riešením.

Pre koho je to určené: Vývojári Java, ktorí skúmajú chyby pri načítaní tried, neočakávané verzie alebo zraniteľné tranzitívne závislosti.

Kontext v roku 2026: Možnosti doplnku sa líšia podľa verzie, preto používajte aktuálnu dokumentáciu Maven Dependency Plugin. Kontrolu stromu doplňte procesom analýzy softvérových komponentov schváleným vo vašej organizácii; bezchybný strom sám osebe nedokazuje bezpečnosť závislostí.

Bezpečnostná poznámka: Príkazy a príklady konfigurácie v pôvodnom článku neboli znovu spustené v aktuálnom produkčnom prostredí. Pred ich použitím overte podporované verzie, zálohy, prístupové oprávnenia a postup obnovy v oddelenom testovacom prostredí.

Hlavné oficiálne zdroje

Prehľad

Táto príručka ukazuje, ako v Mavene skontrolovať konflikty verzií knižníc. Maven vyberie výslednú verziu tranzitívnej závislosti automaticky, no bez ďalšej kontroly nemusí byť rozdiel medzi požadovanými verziami zrejmý.

Obsah

  1. Keď sa v Mavene vyskytnú konflikty závislostí
  2. Ako konflikty preskúmať a riadiť
  3. Zhrnutie

1. Keď sa v Mavene vyskytnú konflikty závislostí

Maven automaticky rieši závislosti knižníc v Jave: spolu s požadovaným artefaktom získa aj ďalšie artefakty JAR, ktoré potrebuje. Podrobný opis mechanizmu nájdete v nasledujúcom článku.

Ako Maven automaticky rieši závislosti knižníc JAR

Ak rôzne cesty vyžadujú odlišné verzie tej istej knižnice, Maven jednu verziu vyberie podľa svojich pravidiel. Nasledujúce postupy odhalia, ktoré verzie boli vynechané, alebo vynútia zlyhanie zostavenia pri nekonzistentných závislostiach.

2. Ako konflikty preskúmať a riadiť

Dve dopĺňajúce sa metódy zviditeľnia graf závislostí aj pravidlá projektu:

  • pravidlo Maven Enforcer pripojené k buildu;
  • kontrola efektívneho stromu pomocou dependency:tree.

Pravidlo Enforcer môže zastaviť build, ktorého graf nekonverguje. Príkaz dependency:tree slúži na diagnostiku ciest a výberu verzií, nejde o osobitnú fázu pred buildom.

2-1. Vynútenie konvergencie pomocou Maven Enforcer

Pravidlo "dependencyConvergence" opisuje nasledujúca stránka Mavenu.

Dokumentácia pravidla dependencyConvergence v Maven Enforcer

Do súboru pom.xml pridajte nasledujúce nastavenia.

pom.xml


<project>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>3.0.0-M3</version>
        <executions>
          <execution>
            <id>enforce</id>
            <configuration>
              <rules>
                <dependencyConvergence/>
              </rules>
            </configuration>
            <goals>
              <goal>enforce</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

Verzia doplnku 3.0.0-M3 v ukážke je historická. Pred použitím konfigurácie vyberte aktuálnu podporovanú verziu a skontrolujte jej dokumentáciu.

Po pridaní uvedeného nastavenia zostavenie pri nekonzistentných verziách závislostí zlyhá s podobným hlásením:

[WARNING] 
Dependency convergence error for org.apache.commons:commons-collections4:4.1 paths to dependency are:
+-com.example.todo:todo-web:1.0.0-SNAPSHOT
  +-org.apache.poi:poi:3.17
    +-org.apache.commons:commons-collections4:4.1
and
+-com.example.todo:todo-web:1.0.0-SNAPSHOT
  +-org.apache.commons:commons-collections4:4.0

[WARNING] Rule 0: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message:
Failed while enforcing releasability. See above detailed error message.

Bez tohto pravidla môže Maven jednu verziu vybrať a zostavenie úspešne dokončiť. Ak má byť nekonzistentný strom chybou, pravidlo musí byť súčasťou projektu.

2-2. Kontrola stromu závislostí

Strom závislostí zobrazí nasledujúci príkaz:

mvn dependency:tree -Dverbose

V závislosti od verzie Maven Dependency Plugin a režimu verbose sa môže pri výbere verzie zobraziť text "omitted for conflict". Nasledujúci príkaz vo Windows vyfiltruje iba tieto riadky; v Linuxe použite namiesto "find" príkaz "grep".

mvn dependency:tree -Dverbose | find "omitted for conflict"

Z výstupu potom zistíte, ktorá cesta priniesla vybranú aj vynechanú verziu knižnice.

3. Zhrnutie

Príkaz "dependency:tree" je vhodný na diagnostiku výsledného stromu. Ak má projekt pri nekonzistentných verziách automaticky zlyhať, nakonfigurujte pravidlo "dependencyConvergence" v doplnku Maven Enforcer.

Príčinu riešte vhodnou aktualizáciou, vedomou voľbou verzie v dependencyManagement alebo úzko odôvodneným exclusion a následne otestujte kompatibilitu.