Kirjastoristiriitojen tarkistaminen Mavenissa


Julkaistu:

Päivitetty:


Artikkelit › Kirjastoristiriitojen tarkistaminen Mavenissa

Tilanne vuonna 2026 ja turvallinen käyttö

Johtopäätös: Suorita mvn dependency:tree tutkiaksesi ratkaistua kaaviota ja määritä sitten, mikä polku esitti odottamattoman version. Korjaa ilmoitus tarkoituksella päivitetyllä suoralla riippuvuudella, dependencyManagement- tai suppeasti perustellulla poissulkemisella.

Mitä opit

  • Miten lähimmän määrittelyn sääntö voi peittää pyydetyn transitiivisen version.
  • Miten yksityiskohtainen ja suodatettu riippuvuuspuu rajaa ristiriidan lähteen.
  • Miksi paikallisen repositorion tiedostojen poistaminen tai satunnaisten poissulkujen lisääminen ei ole kestävä ratkaisu.

Kenelle artikkeli on tarkoitettu: Java-kehittäjät, jotka tutkivat linkitysvirheitä, odottamattomia luokkia tai haavoittuvia transitiivisia versioita.

Tilanne vuonna 2026: Lisäosan asetukset vaihtelevat versioittain, joten tarkista Maven Dependency Pluginin ajantasainen dokumentaatio. Yhdistä graafin tarkistus organisaation hyväksymään ohjelmistokoostumuksen analyysiin; puhdas riippuvuuspuu ei yksin todista riippuvuutta turvalliseksi.

Turvallisuushuomautus: Alkuperäisen artikkelin komentoja ja määritysesimerkkejä ei ole suoritettu uudelleen nykyaikaisessa tuotantoympäristössä. Tarkista tuetut versiot, ota varmuuskopio ja valmistele palautus erillisessä testiympäristössä ennen käyttöönottoa.

Viralliset lähteet

Yleiskatsaus

Kirjastoristiriitojen tarkistaminen Mavenissa. Maven ratkaisee JAR-kirjaston riippuvuudet automaattisesti, mutta oletusasetukset eivät ilmoita ristiriidoista. Näin tarkistat kirjastoristiriidat Mavenissa tällaisissa tapauksissa.

Sisällysluettelo

  1. Kun Mavenissa esiintyy kirjastoristiriitoja
  2. Kuinka tarkistaa
  3. Yhteenveto

1. Kun Mavenissa esiintyy kirjastoristiriitoja

Maven ratkaisee Java-kirjastoriippuvuudet automaattisesti. Automaattinen riippuvuusratkaisu tarkoittaa, että jos sinulla on JAR-tiedosto, jota tarvitset, se hakee automaattisesti JAR-tiedoston, jota tarvitaan kyseisen JAR-tiedoston suorittamiseen. Lisätietoja siitä, miten kirjastokohtaisten riippuvuuksien ratkaiseminen toimii, on seuraavassa artikkelissa.

Miten Maven ratkaisee automaattisesti JAR-kirjastojen riippuvuudet.

Kirjastoristiriitoja ei kuitenkaan ratkaista automaattisesti. Jos asetuksia ei ole käytössä, et voi edes havaita ristiriitaa. Haluamme kuvata, miten kirjastojen ristiriidat voidaan tarkistaa.

2. Kuinka tarkistaa

Kirjastoristiriitojen tarkistamiseen on kaksi päätapaa

  • Lisäosien esittely
  • Buildiä edeltävä tarkistus komennolla.

'Asenna lisäosat' on tapa lisätä asetuksia pom.xml-tiedostoon. 'Tarkista komennolla ennen buildia' tarkoittaa manuaalista tarkistusta ennen buildin suorittamista. Seuraavassa selitetään, miten tämä tehdään.

2-1. Lisäosien esittely

Seuraavista Maven-sivustoista voi olla apua.

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

Lisää seuraavat asetukset pom.xml-tiedostoon.

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>

Kun edellä mainitut asetukset ovat käytössä, kirjastoristiriita aiheuttaa seuraavan virheilmoituksen ja build epäonnistuu.

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

Jos buildia käytetään ilman lisäosia, virheitä ei esiinny ja build päättyy normaalisti. Jos haluat havaita ristiriidat, varmista, että tämä on määritetty.

2-2. Buildiä edeltävä tarkistus komennolla

Riippuvuudet tarkistetaan seuraavien komentojen avulla

mvn dependency:tree -Dverbose

komento, ja jos ristiriita on olemassa, näyttöön tulee teksti "ei ristiriitaa". On myös mahdollista rajata tulosteet vain niihin alueisiin, joissa on ristiriitoja, kuten seuraavassa komennossa. Huomautus:'find' on Windowsin komento. Linuxissa tämä on 'grep'.

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

Kirjastoristiriidat voidaan tarkistaa tarkastelemalla edellä mainittujen komentojen tuloksia.

3. yhteenveto

Jos haluat havaita kirjastoristiriidat luotettavasti, suosittelemme lisäosan käyttöönottoa. Kun tarkistus on osa buildia, mahdollinen ristiriita huomataan buildin epäonnistuessa.

Tässä ovat tärkeimmät huomioitavat vaiheet ja rajoitukset.