Maven függőségi ütközések hibaelhárítása a dependency:tree segítségével


Közzétéve:

Frissítve:


Cikkek › Maven függőségi ütközések hibaelhárítása a dependency:tree segítségével

A 2026-os helyzet és biztonságos használat

Következtetés: Futtassa az mvn dependency:tree parancsot, vizsgálja meg a feloldott függőségi gráfot, majd azonosítsa a váratlan verziót behozó útvonalat. Ezután módosítsa célzottan a deklarációt frissített közvetlen függőséggel, dependencyManagement-tel vagy pontosan indokolt kizárással.

Amit megtudhat

  • Hogyan rejtheti el a „legközelebbi deklaráció” szabálya a kért tranzitív verziót.
  • Hogyan szűkíti az ütközést a részletes és szűrt függőségi fa kimenet.
  • Miért nem tartós megoldás a helyi adattárfájlok törlése vagy véletlenszerű kizárások hozzáadása?

Kinek szól a cikk: Java-fejlesztők, akik a csatolási hibákat, a váratlan osztályokat vagy a sebezhető tranzitív verziókat vizsgálják.

Aktuális helyzet 2026-ban: A plugin beállításai verziónként változnak, ezért ellenőrizze a Maven Dependency Plugin aktuális dokumentációját. A gráf vizsgálatát egészítse ki a szervezet által jóváhagyott szoftverösszetétel-elemzéssel; a tiszta fa önmagában nem bizonyítja, hogy egy függőség biztonságos.

Biztonsági megjegyzés: Az eredeti cikk parancsait és konfigurációs példáit nem futtattuk újra modern éles környezetben. Alkalmazás előtt ellenőrizze a támogatott verziókat, készítsen biztonsági másolatot, és külön tesztkörnyezetben készítse elő a visszaállítást.

Hivatalos források

Áttekintés

Hogyan ellenőrizhetjük a könyvtárkonfliktusokat a Mavenben. A Maven automatikusan feloldja a JAR-könyvtár függőségeit, de az alapértelmezett konfiguráció nem tájékoztat a konfliktusokról. Így ellenőrizheti a Mavenben a könyvtárkonfliktusokat ilyen esetekben.

Tartalomjegyzék

  1. Amikor könyvtárkonfliktusok lépnek fel a Mavenben
  2. Hogyan ellenőrizhető
  3. Összefoglalás

1. Amikor könyvtárkonfliktusok lépnek fel a Mavenben

A Maven automatikusan feloldja a Java könyvtárfüggőségeket. Az automatikus függőségi feloldás azt jelenti, hogy ha van egy JAR-fájl, amire szükséged van, akkor automatikusan megkapod a Jar futtatásához szükséges Jar-t. Az egyes könyvtárfüggőségek feloldásának működéséről bővebben a következő cikkben olvashat.

Hogyan oldja fel a Maven automatikusan a JAR-könyvtárfüggőségeket.

A könyvtári konfliktusok azonban nem oldódnak fel automatikusan. Ráadásul, ha nincsenek meg a beállítások, még a konfliktust sem észlelheti. Szeretnénk leírni, hogyan ellenőrizheti a könyvtári konfliktusokat.

2. Hogyan ellenőrizhető

Két fő módja van a könyvtári konfliktusok ellenőrzésének

  • Plug-inek bemutatása
  • Az építés előtti megerősítés paranccsal.

A 'Plug-inek telepítése' egy módszer a beállítások pom.xml-hez való hozzáadására. A 'Check with command before build' szó szerint azt jelenti, hogy az építés előtti kézi ellenőrzés egy paranccsal. A következőkben bemutatjuk, hogyan kell ezt konkrétan megtenni.

2-1. Plug-inek bemutatása

A következő Maven weboldalak hasznosak lehetnek.

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

Adja hozzá a következő beállításokat a pom.xml fájlhoz.

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>

A fenti beállítások beillesztése esetén a következő hiba lép fel, és a build sikertelen, ha a build idején könyvtárkonfliktusok vannak.

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

Ha a buildet bővítmények nélkül alkalmazza, nem lép fel hiba, és a build normálisan befejeződik. Ha konfliktusokat szeretne észlelni, akkor ezt mindenképpen állítsa be.

2-2. Az építés előtti megerősítés paranccsal.

A függőségek ellenőrzése a következő parancsokkal történik

mvn dependency:tree -Dverbose

parancsot, és ha van konfliktus, megjelenik a 'kihagyva konfliktus esetén'. Az is lehetséges, hogy a kimenetet csak azokra a területekre szűkítsük, ahol konfliktusok vannak, mint a következő parancsban. Megjegyzés:A 'find' a Windows parancs. Linux alatt ez a 'grep'.

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

A könyvtárkonfliktusok ellenőrizhetők a fenti parancsok eredményeinek megnézésével.

3. összefoglaló

Ha megbízhatóan szeretné felismerni a könyvtárkonfliktusokat, javasoljuk a 'Plug-inek telepítése' opciót. A bővítmények bevezetése biztosítja, hogy az esetleges konfliktusokat észrevegyük, mivel a build sikertelen lesz.

Ezek a legfontosabb figyelembe veendő lépések és korlátozások.