Maven priklausomybių konfliktų trikčių šalinimas naudojant dependency:tree


Paskelbimo data:

Atnaujinta:


Techniniai straipsniai > Maven priklausomybių konfliktų trikčių šalinimas naudojant dependency:tree

2026 m. būsena ir saugus naudojimas

Išvada: paleiskite mvn dependency:tree, kad patikrintumėte išspręstą grafiką, tada nustatykite, kuriame kelyje atsirado netikėta versija. Sąmoningai pataisykite deklaraciją naudodami atnaujintą tiesioginę priklausomybę, dependencyManagement arba siaurai pagrįstą išskyrimą.

Ką išmoksite

  • Kaip „artimiausios apibrėžties“ tarpininkavimas gali paslėpti prašomą pereinamąją versiją.
  • Kaip išsami ir filtruota priklausomybės medžio išvestis susiaurina konfliktą.
  • Kodėl vietinės repozitorijos failų ištrynimas arba atsitiktinių išskyrimų pridėjimas nėra ilgalaikis sprendimas.

Kam tai skirta: „Java“ kūrėjams, tiriantiems susiejimo klaidas, netikėtas klases arba pažeidžiamas pereinamojo laikotarpio versijas.

2026 m. kontekstas: papildinio parinktys skiriasi priklausomai nuo versijos, todėl patikrinkite esamą priklausomybės papildinio dokumentaciją. Porų grafikų patikrinimas su organizacijos patvirtintu programinės įrangos sudėties analizės procesu; švarus medis savaime neįrodo, kad priklausomybė yra saugi.

Saugos pastaba: pradiniame straipsnyje pateiktos komandos ir konfigūracijos pavyzdžiai nebuvo pakartotinai vykdomi dabartinėje gamybos aplinkoje. Prieš taikydami, patikrinkite palaikomas versijas, atsargines kopijas, prieigos valdiklius ir atšaukimo veiksmus atskiroje bandymo aplinkoje.

Pagrindiniai oficialūs šaltiniai

Apžvalga.

Kaip patikrinti, ar "Maven" sistemoje nėra bibliotekų konfliktų. "Maven" automatiškai išsprendžia "JAR" bibliotekos priklausomybes, tačiau numatytoji konfigūracija neinformuoja apie konfliktus. Štai kaip tokiais atvejais "Maven" patikrinti, ar nėra bibliotekų konfliktų.

Turinys

  1. Kai "Maven" sistemoje atsiranda bibliotekų konfliktų
  2. Kaip patikrinti
  3. santrauka

1. Kai "Maven" sistemoje atsiranda bibliotekų konfliktų

"Maven" automatiškai išsprendžia "Java" bibliotekų priklausomybes. Automatinė priklausomybių rezoliucija reiškia, kad jei turite reikalingą "JAR" failą, jis automatiškai gaus "JAR", reikalingą tam "JAR" paleisti. Daugiau informacijos apie tai, kaip veikia konkrečios bibliotekos priklausomybės nustatymas, rasite šiame straipsnyje.

Kaip "Maven" automatiškai išsprendžia JAR bibliotekų priklausomybes.

Tačiau atsiradus bibliotekų konfliktams, jie nėra išsprendžiami automatiškai. Be to, jei nesate įdiegę nustatymų, net negalite nustatyti konflikto. Norėtume aprašyti, kaip patikrinti, ar nėra bibliotekos konfliktų.

2. Kaip patikrinti

Yra du pagrindiniai būdai, kaip patikrinti, ar bibliotekoje nėra konfliktų

  • Įskiepių pristatymas
  • Išankstinis sukūrimo patvirtinimas komanda.

"Įdiegti įskiepius" yra pom.xml nustatymų pridėjimo metodas. "Patikrinti naudojant komandą prieš surinkimą" pažodžiui reiškia rankinį patikrinimą naudojant komandą prieš surinkimą. Šiame straipsnyje paaiškinama, kaip tai padaryti.

2-1. Įskiepių pristatymas

Naudingos gali būti šios "Maven" svetainės.

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

Į pom.xml įtraukite šiuos nustatymus.

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>

Jei įterpiami pirmiau minėti nustatymai, atsiranda ši klaida ir surinkimas nepavyksta, jei surinkimo metu yra bibliotekų konfliktų.

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

Jei sąranka taikoma be papildinių, klaidų neatsiranda ir sąranka baigiama įprastai. Jei norite aptikti konfliktus, būtinai tai nustatykite.

2-2. Išankstinis sukūrimo patvirtinimas komanda.

Priklausomybės tikrinamos šiomis komandomis

mvn dependency:tree -Dverbose

komandą, o jei yra konfliktas, rodoma "praleista dėl konflikto". Taip pat galima susiaurinti išvestį tik iki tų sričių, kuriose yra konfliktų, kaip nurodyta toliau pateiktoje komandoje. Pastaba: "find" yra "Windows" komanda. "Linux" sistemoje tai yra "grep".

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

Bibliotekų konfliktus galima patikrinti pažvelgus į pirmiau minėtų komandų rezultatus.

3. santrauka

Jei norite patikimai aptikti bibliotekų konfliktus, rekomenduojame "Įdiegti papildinius". Įdiegus papildinius užtikrinama, kad bet kokie konfliktai bus pastebėti, nes surinkimas nepavyks.

Dėkojame, kad žiūrėjote iki pabaigos.