Hur man kontrollerar bibliotekskonflikter i Maven
Datum för offentliggörande:20 januari 2021.
INFOMARTION > Hur man kontrollerar bibliotekskonflikter i Maven
Översikt.
Hur man kontrollerar bibliotekskonflikter i Maven. Maven löser automatiskt upp beroendena för jar-biblioteket, men standardkonfigurationen informerar dig inte om konflikter. Så här kontrollerar du bibliotekskonflikter i Maven i sådana fall.
Innehållsförteckning
1. När bibliotekskonflikter uppstår i Maven
Maven löser automatiskt Java-biblioteksberoenden. Automatisk beroendeupplösning innebär att om du har en Jar-fil som du behöver kommer den automatiskt att hämta den Jar-fil som behövs för att köra den Jar-filen. För mer information om hur upplösningen av specifika biblioteksberoenden fungerar, se följande artikel.
Hur Maven automatiskt löser beroenden av jar-bibliotek.
När bibliotekskonflikter uppstår löses de dock inte automatiskt. Dessutom kan du inte ens upptäcka en konflikt om du inte har inställningarna på plats. Vi vill beskriva hur du kontrollerar om det finns bibliotekskonflikter.
2. Hur man kontrollerar
Det finns två huvudsakliga sätt att kontrollera om det finns bibliotekskonflikter
- Introduktion av insticksprogram
- Bekräftelse före byggandet med hjälp av kommandot.
"Install plug-ins" är en metod för att lägga till inställningar i pom.xml. "Kontrollera med kommandot innan du bygger" betyder bokstavligen att du manuellt kontrollerar med ett kommando innan du bygger. Jag skulle vilja förklara hur man gör detta konkret.
2-1. Introduktion av insticksprogram
Följande Maven-webbplatser kan vara till hjälp.
http://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html
Lägg till följande inställningar i 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>
Om ovanstående inställningar är införda uppstår följande fel och byggningen misslyckas om det finns bibliotekskonflikter vid byggningstillfället.
[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.
Om en byggning tillämpas utan insticksprogram uppstår inga fel och byggningen avslutas normalt. Om du vill upptäcka konflikter ska du se till att ställa in detta.
2-2. Bekräftelse före byggandet med hjälp av kommandot.
Beroenden kontrolleras med följande kommandon
mvn dependency:tree -Dverbose
och om det finns en konflikt visas "Omited for conflict". Det är också möjligt att begränsa utmatningen till endast de områden där det finns konflikter, som i följande kommando. ※"find" är kommandot för Windows. I Linux är detta "grep".
mvn dependency:tree -Dverbose | find "omitted for conflict"
Bibliotekskonflikter kan kontrolleras genom att titta på resultaten av ovanstående kommandon.
3. sammanfattning
Om du vill upptäcka bibliotekskonflikter på ett tillförlitligt sätt rekommenderar vi "Installera insticksprogram". Genom att införa tilläggsmoduler säkerställs att eventuella konflikter uppmärksammas, eftersom byggandet kommer att misslyckas.
Tack för att du tittade på till slutet.
■INFORMATION
Klicka här för att komma till den översta sidan med information.
■PROFILE
■Kontaktuppgifter.