Hoe te controleren op bibliotheek conflicten in Maven


Datum van publicatie:

Bijgewerkt:


Artikelen > Hoe te controleren op bibliotheek conflicten in Maven

2026 status en veilig gebruik

Conclusie: Uitvoeren mvn dependency:tree om de opgeloste grafiek te inspecteren en vervolgens te bepalen welk pad de onverwachte versie heeft ingevoerd. de verklaring opzettelijk te herstellen met een bijgewerkte directe afhankelijkheid, dependencyManagement, of een strikt gerechtvaardigde uitsluiting.

Wat je zult leren

  • Hoe de Nearest definitie een bemiddeling een gevraagde transitieve versie kan verbergen.
  • Hoe verbose en gefilterde afhankelijkheid-boom output vernauwt een conflict.
  • Waarom het verwijderen van lokale repository bestanden of het toevoegen van willekeurige uitsluitingen is geen duurzame oplossing.

Voor wie: Java-ontwikkelaars onderzoeken koppelingsfouten, onverwachte klassen of kwetsbare transitieve versies.

Actualisatie voor 2026: Plugin opties variëren per versie, dus controleer de huidige afhankelijkheid-plugin documentatie. Paar grafiek inspectie met een organisatie-goedgekeurd software-composition analyse proces; een schone boom bewijst op zichzelf niet een afhankelijkheid is veilig.

Veiligheidsopmerking: de opdrachten en configuratievoorbeelden uit het oorspronkelijke artikel zijn niet opnieuw in een moderne productieomgeving uitgevoerd. Controleer ondersteunde versies, back-ups, toegangsbeheer en terugrolstappen eerst in een afzonderlijke testomgeving.

Officiële primaire bronnen

Overzicht

Hoe te controleren op bibliotheek conflicten in Maven. Maven regelt automatisch de afhankelijkheden voor de jar library, maar de standaard configuratie informeert je niet over conflicten. Dit is hoe je in zo'n geval kunt controleren op bibliotheek conflicten in Maven.

Inhoudsopgave

  1. Wanneer bibliotheek conflicten voorkomen in Maven
  2. Hoe controleer je
  3. samenvatting

1. Wanneer bibliotheek conflicten voorkomen in Maven

Maven lost automatisch de afhankelijkheden van Java bibliotheken op. Automatische afhankelijkheidresolutie betekent dat als je een Jar-bestand hebt dat je nodig hebt, het automatisch de Jar zal krijgen die nodig is om die Jar te draaien. Voor meer informatie over hoe specifieke library dependency resolution werkt, zie het volgende artikel.

Hoe Maven automatisch jar bibliotheek afhankelijkheden oplost.

Wanneer zich bibliotheekconflicten voordoen, worden deze echter niet automatisch opgelost. Sterker nog, als je de instellingen niet hebt, kun je niet eens een conflict detecteren. We willen graag beschrijven hoe u kunt controleren op bibliotheekconflicten.

2. Hoe controleer je

Er zijn twee manieren om bibliotheekconflicten op te sporen

  • Introductie van plug-ins
  • Pre-build bevestiging per commando.

"Plug-ins installeren" voegt instellingen toe aan pom.xml. "Controleren met een opdracht vóór de build" betekent dat de controle handmatig vóór het bouwen wordt uitgevoerd; hieronder staat de concrete werkwijze.

2-1. Introductie van plug-ins

De volgende Maven websites kunnen nuttig zijn.

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

Voeg de volgende instellingen toe aan 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>

Als de bovenstaande instellingen worden ingevoegd, treedt de volgende fout op en mislukt het bouwen als er bibliotheekconflicten zijn op het moment van bouwen.

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

Als een build wordt toegepast zonder plug-ins, treden er geen fouten op en eindigt de build normaal. Als u conflicten wilt detecteren, zorg er dan voor dat u dit instelt.

2-2. Pre-build bevestiging per commando.

Afhankelijkheden worden gecontroleerd door de volgende commando's

mvn dependency:tree -Dverbose

commando en 'weggelaten voor conflict' wordt weergegeven als er een conflict is. Het is ook mogelijk om de uitvoer te beperken tot alleen die gebieden waar conflicten zijn, zoals in het volgende commando. Opmerking: 'find' is het commando voor Windows. Voor Linux is dit 'grep'.

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

Bibliotheekconflicten kunnen worden gecontroleerd door te kijken naar de resultaten van de bovenstaande commando's.

3. samenvatting

Als u bibliotheekconflicten betrouwbaar wilt detecteren, raden wij 'Plug-ins installeren' aan. Het invoeren van plug-ins zorgt ervoor dat eventuele conflicten worden opgemerkt, omdat het bouwen zal mislukken.

■INFORMATION

Artikelen


■PROFILE

Profiel


■Contact

Contact