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