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
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.
<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.
■Cikkek
■Profil
■Kapcsolat