Odpravljanje težav s konflikti odvisnosti Maven s pomočjo dependency:tree


Datum objave:

Osveženo:


Tehnični članki > Odpravljanje težav s konflikti odvisnosti Maven s pomočjo dependency:tree

Status in varna uporaba 2026

Sklep: Poženi mvn dependency:tree da pregleda rešeni graf in nato ugotovi, katera pot je uvedla nepričakovano različico. Namerno določi izjavo s posodobljeno neposredno odvisnostjo, dependencyManagement, ali ozko upravičeno izključitev.

Kaj se boš naučil?

  • Kako lahko »najbližja definicija« mediacije skrije zahtevano tranzitno različico.
  • Kako glagolsko in filtrirano izpis odvisnih dreves zoži konflikt.
  • Zakaj brisanje krajevnih datotek repozitorijeva ali dodajanje naključnih izključitev ni trajna fiks.

Za koga je to? Java razvijalci raziskujejo napake pri povezavah, nepričakovane razrede ali ranljive tranzitne različice.

Kontekst za leto 2026: Možnosti vstavkov se razlikujejo glede na različico, zato preverite trenutno dokumentacijo o odvisnosti od plugina. Inšpekcija pair grafa z organizacijsko odobrenim postopkom analize programske opreme; čisto drevo samo po sebi ne dokazuje, da je odvisnost varna.

Varnostna opomba: Ukazi in konfiguracijski primeri v prvotnem članku niso bili ponovno predvajani v trenutnem proizvodnem okolju. Pred uporabo preveri podprte različice, varnostne kopije, nadzor dostopa in povratne korake v ločenem preskusnem okolju.

Glavni uradni viri

Pregled.

Kako preveriti konflikte knjižnic v programu Maven. Maven samodejno razreši odvisnosti knjižnice JAR, vendar vas privzeta konfiguracija ne obvesti o konfliktih. V takih primerih lahko v programu Maven preverite konflikte knjižnic.

Kazalo vsebine

  1. Ko v programu Maven pride do navzkrižja knjižnic
  2. Kako preveriti
  3. povzetek

1. Ko v programu Maven pride do navzkrižja knjižnic

Maven samodejno razreši odvisnosti knjižnic Java. Samodejno reševanje odvisnosti pomeni, da če imate datoteko JAR, ki jo potrebujete, bo samodejno pridobil datoteko JAR, ki je potrebna za zagon te datoteke Jar. Za več informacij o tem, kako deluje reševanje odvisnosti določenih knjižnic, glejte naslednji članek.

Kako Maven samodejno rešuje odvisnosti knjižnic jar.

Ko pride do knjižničnih konfliktov, se ti ne rešijo samodejno. Poleg tega, če nimate vzpostavljenih nastavitev, ne morete zaznati konflikta. Želimo opisati, kako preveriti konflikte v knjižnici.

2. Kako preveriti

Konflikte v knjižnici lahko preverite na dva glavna načina

  • Predstavitev vtičnikov
  • Potrditev pred gradnjo z ukazom.

'Namesti vtičnike' je metoda dodajanja nastavitev v pom.xml. 'Preveri z ukazom pred gradnjo' dobesedno pomeni ročno preverjanje z ukazom pred gradnjo. Rad bi pojasnil, kako to storiti.

2-1. Predstavitev vtičnikov

V pomoč so vam lahko naslednja spletna mesta Maven.

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

V pom.xml dodajte naslednje nastavitve.

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>

Če vstavite zgornje nastavitve, se pojavi naslednja napaka in sestava se ne izvede, če v času sestavljanja pride do navzkrižja knjižnic.

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

Če je sestava uporabljena brez vtičnikov, ne pride do napak in sestava se normalno zaključi. Če želite zaznati konflikte, to nastavite.

2-2. Potrditev pred gradnjo z ukazom.

Odvisnosti se preverjajo z naslednjimi ukazi

mvn dependency:tree -Dverbose

in v primeru konflikta se prikaže "izpuščeno za konflikt". Izpis je mogoče zožiti samo na tista področja, kjer so konflikti, kot v naslednjem ukazu. Opomba: 'find' je ukaz za Windows. V operacijskem sistemu Linux je to program 'grep'.

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

Konflikte knjižnic lahko preverite tako, da si ogledate rezultate zgornjih ukazov.

3. povzetek

Če želite zanesljivo zaznati navzkrižja knjižnic, priporočamo možnost "Namesti vtičnike". Z uvedbo vtičnikov zagotovite, da bodo morebitni konflikti opaženi, saj bo sestava neuspešna.

Upamo, da je bila razlaga koristna.