Hoe te controleren op bibliotheek conflicten in Maven


Datum van publicatie:20 januari 2021.



INFOMARTION > Hoe te controleren op bibliotheek conflicten in Maven

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" is een methode om instellingen toe te voegen aan pom.xml. Controleren met commando vóór bouwen' betekent letterlijk: handmatig controleren met een commando vóór het bouwen. Ik wil graag uitleggen hoe je dit specifiek doet.

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. ※'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.

Bedankt voor het kijken tot het einde.