Rozwiązywanie konfliktów zależności Maven za pomocą dependency:tree


Data publikacji:

Aktualizacja:


Artykuły > Rozwiązywanie konfliktów zależności Maven za pomocą dependency:tree

Stan na rok 2026 i bezpieczne użytkowanie

Wniosek: Uruchom mvn dependency:tree, aby sprawdzić rozwiązany wykres, a następnie określ, która ścieżka wprowadziła nieoczekiwaną wersję. Napraw celowo deklarację, dodając zaktualizowaną bezpośrednią zależność, dependencyManagement lub wąsko uzasadnione wykluczenie.

Czego się nauczysz

  • Jak mediacja „najbliższej definicji” może ukryć żądaną wersję przechodnią.
  • Jak szczegółowe i filtrowane dane wyjściowe drzewa zależności zawężają konflikt.
  • Dlaczego usunięcie plików lokalnego repozytorium lub dodanie losowych wykluczeń nie jest trwałym rozwiązaniem.

Dla kogo: programiści Java badający błędy połączeń, nieoczekiwane klasy lub podatne na ataki wersje przechodnie.

Aktualizacja na 2026 rok: Opcje wtyczek różnią się w zależności od wersji, dlatego sprawdź aktualną dokumentację wtyczki zależności. Połącz kontrolę wykresów z zatwierdzonym przez organizację procesem analizy składu oprogramowania; czyste drzewo samo w sobie nie dowodzi, że zależność jest bezpieczna.

Uwaga dotycząca bezpieczeństwa: polecenia i przykłady konfiguracji z pierwotnego artykułu nie zostały ponownie uruchomione we współczesnym środowisku produkcyjnym. Przed użyciem sprawdź wspierane wersje, kopie zapasowe, kontrolę dostępu i procedurę wycofania w oddzielnym środowisku testowym.

Oficjalne źródła pierwotne

Przegląd

Jak sprawdzić konflikty bibliotek w Mavenie. Maven automatycznie rozwiązuje zależności dla biblioteki jar, ale domyślna konfiguracja nie informuje o konfliktach. Oto jak w takich przypadkach sprawdzić konflikty bibliotek w Mavenie.

Spis treści

  1. Kiedy w Mavenie występują konflikty bibliotek
  2. Jak sprawdzić
  3. streszczenie

1. Kiedy w Mavenie występują konflikty bibliotek

Maven automatycznie rozwiązuje zależności od bibliotek Java. Automatyczne rozwiązywanie zależności oznacza, że jeśli potrzebny jest plik Jar, to program automatycznie pobierze plik Jar potrzebny do jego uruchomienia. Więcej informacji o tym, jak działa rozwiązywanie zależności między poszczególnymi bibliotekami, można znaleźć w poniższym artykule.

Jak Maven automatycznie rozwiązuje zależności bibliotek w plik JARu.

Jednak w przypadku wystąpienia konfliktów bibliotecznych nie są one rozwiązywane automatycznie. Co więcej, jeśli nie ma odpowiednich ustawień, nie można nawet wykryć konfliktu. Chcielibyśmy opisać, w jaki sposób można sprawdzić, czy w bibliotece nie występują konflikty.

2. Jak sprawdzić

Istnieją dwa główne sposoby sprawdzenia, czy w bibliotece nie występują konflikty

  • Wprowadzanie wtyczek
  • Potwierdzenie wstępnej kompilacji za pomocą polecenia.

Polecenie "Zainstaluj wtyczki" to metoda dodawania ustawień do pliku pom.xml. Polecenie "Sprawdź za pomocą polecenia przed budową" oznacza dosłowne ręczne sprawdzenie za pomocą polecenia przed budową. W tej sekcji wyjaśniono, jak konkretnie to zrobić.

2-1. Wprowadzanie wtyczek

Pomocne mogą być następujące strony internetowe dotyczące Mavena.

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

Dodaj następujące ustawienia do pliku pom.xml.

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>

Jeśli powyższe ustawienia zostaną wprowadzone, wystąpi następujący błąd i kompilacja nie powiedzie się, jeśli w czasie kompilacji wystąpią konflikty bibliotek.

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

Jeśli zastosowano kompilację bez wtyczek, nie występują żadne błędy i kompilacja kończy się normalnie. Jeśli chcesz wykrywać konflikty, pamiętaj, aby to skonfigurować.

2-2. Potwierdzenie wstępnej kompilacji za pomocą polecenia.

Zależności są sprawdzane za pomocą następujących poleceń

mvn dependency:tree -Dverbose

a w przypadku wystąpienia konfliktu wyświetlany jest komunikat "pominięto w poszukiwaniu konfliktu". Można również zawęzić dane wyjściowe tylko do tych obszarów, w których występują konflikty, jak w poniższym poleceniu. Uwaga: Polecenie 'find' jest przeznaczone dla systemu Windows. W systemie Linux jest to polecenie "grep".

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

Konflikty bibliotek można sprawdzić, przeglądając wyniki powyższych poleceń.

3. streszczenie

Jeśli chcesz niezawodnie wykrywać konflikty bibliotek, zalecamy opcję "Zainstaluj wtyczki". Wprowadzenie wtyczek gwarantuje, że wszelkie konflikty zostaną zauważone, ponieważ kompilacja nie powiedzie się.

■INFORMATION

Artykuły


■PROFILE

Profil


■Kontakt

Kontakt