2015-06-18 40 views
11

Bir modülün iki bağımlılığı hem yaygın bir bağımsızlık seviyesine sahipse de, kendi modüllerinde farklı sürümleri varsa, bu modül, modülün oluşturulmasında kullanılır? senaryoda Benzer Bağımlılık sürümlerini çözme Maven

 Artifact-A 
     /  \ 
    /  \ 
    /   \ 
Artifact-B  Artifact-C 
     \   /
1.6.0 \  /1.8.0 
     \  /
     Artifact-D 

Örneğin

için

Artifakt-A ediyorum Yapay-C'nin hangi sürümünü kullanımını aşağıda ayrıntılı?

Artifact-A 
     |  \ 
     |  | 
     |  | 
    Artifact-B | 1.60.0 
     |  | 
1.62.0 |  | 
     | /
    Artifact-C 

Eğer maven'in bu sürümleri nasıl çözdüğüne dair kısa bir açıklama sunabilir veya bağlantı kurabilirsiniz.

+0

ayrıca bkz: http://stackoverflow.com/questions/6283891/how-does-maven-resolve-version-conflicts-of-transitive-dependencies-nearest-wi –

cevap

7

Introduction to the Dependency Mechanism bakınız: Geçişli bağımlılıkları ile

dahil kütüphanelerin grafiği hızla oldukça büyük büyüyebilir. - Bu yapay bir öğe birden çok sürümü karşılaşıldığında kullanılacak bir bağımlılık hangi sürümünü belirler

  • Bağımlılık arabuluculuk: Bu nedenle, bağımlılıkları dahildir sınırlar bazı ek özellikler vardır. Maven 2.0 şu anda sadece “en yakın tanımı” kullanmayı desteklemektedir, bu da projenize bağımlılık ağacında en yakın bağımlılığın sürümünü kullanacağı anlamına gelir. Bir süreyi, projenizin POM'unda açıkça beyan ederek her zaman garanti edebilirsiniz. Bağımlılık ağacında iki bağımlılık sürümü aynı derinlikte ise, Maven 2.0.8'in hangisinin kazanacağına karar verilinceye kadar, ancak Maven 2.0.9'dan bu yana bildirilen beyanın sırasına göre: ilk bildirim kazanır..
    • "en yakın tanımı" versiyonu örneğin bağımlılıkları ağacında, projenize en yakın biri olacak kullanıldığı anlamına gelir. A, B ve C için bağımlılıklar A -> B -> C -> D 2.0 ve A -> E -> D 1.0 olarak tanımlanırsa, A'yı yönetirken D 1.0 kullanılır. E daha kısa. Açıkça D 2.0 kullanımını

Bunun anlamı zorlamak için A, D 2.0 için bir bağımlılık ekleyin ki ilk örnek (Maven'i 2.0.9 başlayarak) yapay B ise için zaman, D, proje B bildirilen bağımlılık seçilir

<dependency> 
    <groupId>groupB</groupId> 
    <artifactId>projectB</artifactId> 
</dependency> 
<dependency> 
    <groupId>groupC</groupId> 
    <artifactId>projectC</artifactId> 
</dependency> 

aşağıdaki gibi yapay önce C, a bir bağımlılık olarak ilan edilmiştir.

+0

Ben ne anlama geldiğini anlamıyorum Beyannamede sipariş, buna göre 1. örnekte bağımlılığın nasıl seçileceğini açıklayabilir misiniz? –

+1

@ChamilaWijayarathna Cevabın son bölümünü güncellendi. – manouti

İlgili konular