Maven'da kütüphane çakışmaları nasıl kontrol edilir


Yayın Tarihi:20 Ocak 2021.



INFOMARTION > Maven'da kütüphane çakışmaları nasıl kontrol edilir

Genel bakış.

Maven'da kütüphane çakışmaları nasıl kontrol edilir? Maven, jar kütüphanesinin bağımlılıklarını otomatik olarak çözer, ancak varsayılan yapılandırma sizi çakışmalar konusunda bilgilendirmez. Bu gibi durumlarda Maven'da kütüphane çakışmalarının nasıl kontrol edileceği aşağıda açıklanmıştır.

İçindekiler

  1. Maven'da kütüphane çakışmaları oluştuğunda
  2. Nasıl kontrol edilir
  3. özet

1. Maven'da kütüphane çakışmaları oluştuğunda

Maven, Java kütüphane bağımlılıklarını otomatik olarak çözer. Otomatik bağımlılık çözümlemesi, ihtiyacınız olan bir Jar dosyası varsa, bu Jar'ı çalıştırmak için gereken Jar'ı otomatik olarak alacağı anlamına gelir. Belirli kütüphane bağımlılık çözümlemesinin nasıl çalıştığı hakkında daha fazla bilgi için aşağıdaki makaleye bakın.

Maven, jar kütüphanesi bağımlılıklarını otomatik olarak nasıl çözer?

Ancak, kütüphane çakışmaları meydana geldiğinde, bunlar otomatik olarak çözülmez. Dahası, ayarlarınız yerinde değilse, bir çakışmayı bile tespit edemezsiniz. Kütüphane çakışmalarının nasıl kontrol edileceğini açıklamak istiyoruz.

2. Nasıl kontrol edilir

Kütüphane çakışmalarını kontrol etmenin iki ana yolu vardır

  • Eklentilerin tanıtılması
  • Komutla ön oluşturma onayı.

'Eklentileri yükle', pom.xml'ye ayar eklemenin bir yöntemidir. 'Derlemeden önce komutla kontrol et' kelimenin tam anlamıyla, derlemeden önce bir komutla manuel olarak kontrol etmek anlamına gelir. Bunun nasıl yapılacağını özellikle açıklamak istiyorum.

2-1. Eklentilerin tanıtılması

Aşağıdaki Maven web siteleri yardımcı olabilir.

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

Aşağıdaki ayarları pom.xml'ye ekleyin.

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>

Yukarıdaki ayarlar eklenirse, aşağıdaki hata oluşur ve derleme sırasında kütüphane çakışmaları varsa derleme başarısız olur.

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

Hiçbir eklenti olmadan bir derleme uygulanırsa, hiçbir hata oluşmaz ve derleme normal şekilde sonlanır. Çakışmaları tespit etmek istiyorsanız, bunu ayarladığınızdan emin olun.

2-2. Komutla ön oluşturma onayı.

Bağımlılıklar aşağıdaki komutlarla kontrol edilir

mvn dependency:tree -Dverbose

komutu görüntülenir ve bir çakışma varsa 'çakışma için atlandı' görüntülenir. Aşağıdaki komutta olduğu gibi, çıktıyı yalnızca çakışmaların olduğu alanlara daraltmak da mümkündür. ※'find' Windows için bir komuttur. Linux için bu 'grep'tir.

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

Kütüphane çakışmaları yukarıdaki komutların sonuçlarına bakılarak kontrol edilebilir.

3. özet

Kütüphane çakışmalarını güvenilir bir şekilde tespit etmek istiyorsanız, 'Eklentileri yükle' seçeneğini kullanmanızı öneririz. Eklentilerin tanıtılması, derleme başarısız olacağından herhangi bir çakışmanın fark edilmesini sağlar.

Sonuna kadar izlediğiniz için teşekkür ederiz.