Come controllare i conflitti di libreria in Maven
Data di pubblicazione:
Aggiornato:
Articoli > Come controllare i conflitti di libreria in Maven
2026 stato e uso sicuro
Conclusione: Corri! mvn dependency:tree per ispezionare il grafico risolto, quindi identificare quale percorso ha introdotto la versione inaspettata. Fissare la dichiarazione deliberatamente con una dipendenza diretta aggiornata, dependencyManagement, o un'esclusione strettamente giustificata.
Cosa imparerai
- Come la mediazione "definizione del ricovero" può nascondere una versione transitoria richiesta.
- Il modo in cui l'output di dipendenze-albero filtrato e verboso restringe un conflitto.
- Perché eliminare i file di repository locali o aggiungere esclusioni casuali non è una soluzione durevole.
Destinatari: Sviluppatori Java che indagano errori di collegamento, classi inaspettate o versioni transitorie vulnerabili.
Nota di aggiornamento (2026): Le opzioni Plugin variano in base alla versione, quindi controlla la documentazione corrente di dipendenza-plugin. Abbina ispezione del grafico con un processo di analisi software-composizione approvato dall'organizzazione; un albero pulito non prova di per sé una dipendenza è sicura.
Nota di sicurezza: i comandi e gli esempi di configurazione dell'articolo originale non sono stati rieseguiti in un ambiente di produzione moderno. Prima di applicarli, verifica versioni supportate, backup, controlli di accesso e procedura di rollback in un ambiente di prova isolato.
Fonti primarie ufficiali
Panoramica
Come controllare i conflitti di libreria in Maven. Maven risolve automaticamente le dipendenze della libreria jar, ma la configurazione predefinita non informa sui conflitti. Ecco come controllare i conflitti di libreria in Maven in questi casi.
Indice dei contenuti
1. Quando si verificano conflitti di libreria in Maven
Maven risolve automaticamente le dipendenze delle librerie Java. La risoluzione automatica delle dipendenze significa che se si ha un file Jar di cui si ha bisogno, si otterrà automaticamente il Jar necessario per eseguirlo. Per ulteriori informazioni sul funzionamento della risoluzione delle dipendenze di librerie specifiche, si veda il seguente articolo.
Come Maven risolve automaticamente le dipendenze delle librerie jar.
Tuttavia, quando si verificano conflitti tra le biblioteche, questi non vengono risolti automaticamente. Inoltre, se non si dispone delle impostazioni, non è nemmeno possibile rilevare un conflitto. Descriviamo come verificare la presenza di conflitti tra le biblioteche.
2. Come controllare
Esistono due modi principali per verificare la presenza di conflitti in biblioteca
- Introduzione dei plug-in
- Conferma della pre-costruzione tramite comando.
'Installare i plug-in' è un metodo per aggiungere le impostazioni a pom.xml. 'Check with command before build' significa letteralmente controllare manualmente con un comando prima di costruire. Vorrei spiegarvi come farlo nello specifico.
2-1. Introduzione dei plug-in
I seguenti siti web di Maven possono essere utili.
http://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html
Aggiungere le seguenti impostazioni a 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>
Se si inseriscono le impostazioni di cui sopra, si verifica il seguente errore e la compilazione fallisce se ci sono conflitti di libreria al momento della compilazione.
[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.
Se si applica una build senza plug-in, non si verificano errori e la build termina normalmente. Se si desidera rilevare i conflitti, assicurarsi di impostarlo.
2-2. Conferma della pre-costruzione tramite comando.
Le dipendenze sono controllate dai seguenti comandi
mvn dependency:tree -Dverbose
e, in caso di conflitto, viene visualizzato "omesso per conflitto". È anche possibile restringere l'output solo alle aree in cui ci sono conflitti, come nel comando seguente. Nota: 'find' è il comando per Windows. Per Linux, questo è 'grep'.
mvn dependency:tree -Dverbose | find "omitted for conflict"
I conflitti tra le librerie possono essere verificati osservando i risultati dei comandi precedenti.
3. sintesi
Se si desidera rilevare in modo affidabile i conflitti tra le librerie, si consiglia di "Installare i plug-in". L'introduzione di plug-in assicura che eventuali conflitti vengano notati, in quanto la compilazione fallirà.