Řešení konfliktů závislostí Maven pomocí dependency:tree


Publikováno:

Aktualizováno:


Články › Řešení konfliktů závislostí Maven pomocí dependency:tree

Stav v roce 2026 a bezpečné použití

Závěr: Spuštěním mvn dependency:tree zkontrolujte vyřešený graf a poté zjistěte, která cesta zavedla neočekávanou verzi. Opravte deklaraci záměrně aktualizovanou přímou závislostí, dependencyManagement nebo úzce odůvodněným vyloučením.

Co se dozvíte

  • Jak může mediace „nejbližší definice“ skrýt požadovanou tranzitivní verzi.
  • Jak podrobný a filtrovaný výstup stromu závislostí zužuje konflikt.
  • Proč mazání souborů místního úložiště nebo přidávání náhodných vyloučení není trvalé řešení.

Pro koho je článek určen: Vývojáři Java zkoumající chyby propojení, neočekávané třídy nebo zranitelné tranzitivní verze.

Aktuální stav v roce 2026: Možnosti pluginu se liší podle verze, proto používejte aktuální dokumentaci Maven Dependency Pluginu. Kontrolu grafu doplňte organizací schválenou analýzou složení softwaru; čistý strom sám o sobě neprokazuje, že je závislost bezpečná.

Bezpečnostní poznámka: Příkazy a konfigurační příklady z původního článku nebyly znovu spuštěny v současném produkčním prostředí. Před nasazením ověřte podporované verze, vytvořte zálohu a připravte postup návratu v odděleném testovacím prostředí.

Oficiální zdroje

Přehled

Jak zkontrolovat konflikty knihoven v nástroji Maven. Maven automaticky řeší závislosti knihovny JAR, ale výchozí konfigurace vás o konfliktech neinformuje. V takových případech lze v nástroji Maven zkontrolovat konflikty knihoven.

Obsah

  1. Když se v Mavenu vyskytnou konflikty knihoven
  2. Jak zkontrolovat
  3. Shrnutí

1. Když se v Mavenu vyskytnou konflikty knihoven

Maven automaticky řeší závislosti knihoven Java. Automatické řešení závislostí znamená, že pokud máte soubor Jar, který potřebujete, automaticky získá soubor Jar potřebný ke spuštění tohoto souboru Jar. Další informace o tom, jak funguje řešení závislostí konkrétních knihoven, naleznete v následujícím článku.

Jak Maven automaticky řeší závislosti knihoven jar.

Pokud však dojde ke konfliktu knihoven, není vyřešen automaticky. A co víc, pokud nastavení nemáte, nemůžete konflikt ani zjistit. Rádi bychom popsali, jak zkontrolovat konflikty v knihovně.

2. Jak zkontrolovat

Existují dva hlavní způsoby, jak zkontrolovat konflikty v knihovně.

  • Představení zásuvných modulů
  • Potvrzení před sestavením příkazem.

'Instalovat zásuvné moduly' je metoda přidání nastavení do souboru pom.xml. 'Zkontrolovat příkazem před sestavením' doslova znamená ruční kontrolu příkazem před sestavením. Rád bych vám vysvětlil, jak to konkrétně udělat.

2-1. Představení zásuvných modulů

Nápomocné mohou být následující webové stránky Maven.

http://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html

Do souboru pom.xml přidejte následující nastavení.

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>

Pokud jsou vložena výše uvedená nastavení, dojde k následující chybě a sestavení se nezdaří, pokud v době sestavení existují konflikty knihoven.

[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.

Pokud je sestavení použito bez zásuvných modulů, nedojde k žádným chybám a sestavení se normálně ukončí. Pokud chcete detekovat konflikty, nezapomeňte to nastavit.

2-2. Potvrzení před sestavením příkazem.

Závislosti se kontrolují pomocí následujících příkazů

mvn dependency:tree -Dverbose

a v případě konfliktu se zobrazí "vynecháno pro konflikt". Je také možné zúžit výstup pouze na ty oblasti, kde se vyskytují konflikty, jako v následujícím příkazu. Poznámka:'find' je příkaz pro systém Windows. V systému Linux je to příkaz 'grep'.

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

Konflikty knihoven lze zkontrolovat na základě výsledků výše uvedených příkazů.

3. shrnutí

Pokud chcete spolehlivě zjistit konflikty knihoven, doporučujeme "Instalovat zásuvné moduly". Zavedením zásuvných modulů zajistíte, že si případných konfliktů všimnete, protože sestavení selže.

Tím jsou shrnuty hlavní kroky a omezení, která je třeba zohlednit.