Cum să verificați conflictele de bibliotecă în Maven


Data publicării:20 ianuarie 2021.



INFOMARTION > Cum să verificați conflictele de bibliotecă în Maven

Prezentare generală.

Cum să verificați dacă există conflicte de bibliotecă în Maven. Maven rezolvă automat dependențele bibliotecii jar, dar configurația implicită nu vă informează cu privire la conflicte. Iată cum să verificați dacă există conflicte de bibliotecă în Maven în astfel de cazuri.

Cuprins

  1. Când apar conflicte de bibliotecă în Maven
  2. Cum se verifică
  3. rezumat

1. Când apar conflicte de bibliotecă în Maven

Maven rezolvă automat dependențele bibliotecilor Java. Rezolvarea automată a dependențelor înseamnă că, dacă aveți un fișier Jar de care aveți nevoie, acesta va obține automat Jar-ul necesar pentru a rula acel Jar. Pentru mai multe informații despre modul în care funcționează rezolvarea dependențelor specifice de bibliotecă, consultați următorul articol.

Modul în care Maven rezolvă automat dependențele bibliotecilor jar.

Cu toate acestea, atunci când apar conflicte de bibliotecă, acestea nu sunt rezolvate automat. Mai mult, dacă nu aveți setările în vigoare, nici măcar nu puteți detecta un conflict. Am dori să vă descriem cum să verificați dacă există conflicte în bibliotecă.

2. Cum se verifică

Există două modalități principale de a verifica dacă există conflicte în bibliotecă

  • Introducerea de plug-in-uri
  • Confirmarea precompilării prin comandă.

"Install plug-ins" este o metodă de adăugare a setărilor în pom.xml. "Check with command before build" înseamnă literalmente verificarea manuală cu o comandă înainte de construire. Aș dori să vă explic cum să faceți acest lucru în mod specific.

2-1. Introducerea de plug-in-uri

Următoarele site-uri web Maven vă pot fi de ajutor.

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

Adăugați următoarele setări la 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>

Dacă se introduc setările de mai sus, apare următoarea eroare, iar compilarea eșuează dacă există conflicte de bibliotecă în momentul compilării.

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

În cazul în care se aplică o compilare fără plug-in-uri, nu apare nicio eroare și compilarea se termină în mod normal. Dacă doriți să detectați conflictele, asigurați-vă că ați configurat acest lucru.

2-2. Confirmarea precompilării prin comandă.

Dependențele sunt verificate prin următoarele comenzi

mvn dependency:tree -Dverbose

și se afișează "omitted for conflict" în cazul în care există un conflict. De asemenea, este posibil să se restrângă rezultatul doar la acele zone în care există conflicte, ca în cazul următoarei comenzi. ※'find' este comanda pentru Windows. Pentru Linux, acesta este "grep".

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

Conflictele dintre biblioteci pot fi verificate prin examinarea rezultatelor comenzilor de mai sus.

3. rezumat

Dacă doriți să detectați în mod fiabil conflictele de bibliotecă, vă recomandăm "Install plug-ins". Introducerea de plug-in-uri asigură faptul că orice conflict este observat, deoarece compilarea va eșua.

Vă mulțumim că ați urmărit până la sfârșit.