Ako skontrolovať konflikty knižníc v programe Maven


Dátum vydania:20. januára 2021.



INFOMARTION > Ako skontrolovať konflikty knižníc v programe Maven

Prehľad.

Ako skontrolovať konflikty knižníc v programe Maven. Maven automaticky rieši závislosti pre knižnicu jar, ale predvolená konfigurácia vás neinformuje o konfliktoch. Takto sa v takýchto prípadoch kontrolujú konflikty knižníc v programe Maven.

Obsah

  1. Keď sa v programe Maven vyskytnú konflikty knižníc
  2. Ako skontrolovať
  3. zhrnutie

1. Keď sa v programe Maven vyskytnú konflikty knižníc

Maven automaticky rieši závislosti knižníc Java. Automatické riešenie závislostí znamená, že ak máte súbor Jar, ktorý potrebujete, automaticky sa získa súbor Jar potrebný na jeho spustenie. Viac informácií o tom, ako funguje riešenie závislostí konkrétnych knižníc, nájdete v nasledujúcom článku.

Ako Maven automaticky rieši závislosti knižníc jar.

Keď však dôjde ku konfliktu knižníc, nevyrieši sa automaticky. Navyše, ak nemáte nastavenia, nemôžete konflikt ani zistiť. Chceli by sme opísať, ako skontrolovať konflikty v knižnici.

2. Ako skontrolovať

Existujú dva hlavné spôsoby kontroly konfliktov v knižnici

  • Predstavenie zásuvných modulov
  • Potvrdenie pred zostavením príkazom.

'Inštalácia zásuvných modulov' je metóda pridávania nastavení do súboru pom.xml. 'Skontrolovať príkazom pred zostavením' doslova znamená ručnú kontrolu príkazom pred zostavením. Rád by som vám vysvetlil, ako to konkrétne urobiť.

2-1. Predstavenie zásuvných modulov

Nápomocné vám môžu byť tieto webové stránky Maven.

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

Do súboru pom.xml pridajte nasledujúce nastavenia.

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>

Ak sú vložené vyššie uvedené nastavenia, dôjde k nasledujúcej chybe a zostavenie zlyhá, ak v čase zostavovania existujú konflikty knižníc.

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

Ak sa zostavenie použije bez zásuvných modulov, nevyskytnú sa žiadne chyby a zostavenie sa normálne ukončí. Ak chcete zistiť konflikty, nezabudnite to nastaviť.

2-2. Potvrdenie pred zostavením príkazom.

Závislosti sa kontrolujú pomocou nasledujúcich príkazov

mvn dependency:tree -Dverbose

a v prípade konfliktu sa zobrazí "vynechané pre konflikt". Výstup je tiež možné zúžiť len na tie oblasti, v ktorých sa vyskytujú konflikty, ako v nasledujúcom príkaze. ※'find' je príkaz pre systém Windows. V systéme Linux je to príkaz 'grep'.

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

Konflikty knižníc možno skontrolovať na základe výsledkov uvedených príkazov.

3. zhrnutie

Ak chcete spoľahlivo zistiť konflikty knižníc, odporúčame "Inštalovať zásuvné moduly". Zavedením zásuvných modulov sa zabezpečí, že všetky konflikty budú zaznamenané, pretože zostavenie zlyhá.

Ďakujeme vám za sledovanie až do konca.