2011-05-22 25 views
8

Hiçbir şey bulamadan böyle bir soruyu araştırdım, işte gidiyorum.Maven çoklu modül: ortak bağımlılıkları tek bir toplu olarak topluyor musunuz?

Çok modüllü bir maven projem var. Birden fazla modül, ortak bağımlılıkların tanımlandığı aynı üst öğeyi devralır. Bunlar arasında, bazı ortak işlevlerin uygulandığı bir 'ortak' olan kendi modüllerim var.

Sorum şu: Ortak bağımlılıklar için daha iyi bir uygulama ne olurdu: Şu anda yaptığım gibi ebeveynleri açık bir şekilde tanımlayın. Ya da onları diğer modüllerin referans aldığı 'ortak' bir modülde tanımlayın ve daha sonra geçişliliğe güvenin (ortak bağımlılıklar için tek giriş noktası gibi)?

cevap

14

Bağımlılıklarınızı ve sürümlerini tanımlamak için, ana pompanızdaki dependencyManagement etiketini kullanmak en iyisidir, daha sonra gerektiğinde alt modüllerinizdeki bu bağımlılıkları referans alın. Projenizdeki diğer alt modüllere (yani başka bir alt modülden ortak alt modülden) ihtiyacınız olduğunda, bağımlılıklar geçici olarak bulunur. Örneğin:

Ebeveyninizin pom olarak

: En yaygın pom olarak

<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.7</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

(haber hiçbir sürümü veya kapsam yoktur):

<dependencies> 
    <dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    </dependency> 
</dependencies> 

Ve kendi kendine adresinin ortak alt modülünü başvurabilir diğer alt modüller zaten.

+1

Ancak bağımlılık yönetiminin viral olduğunu unutmayın. Yani A -> B, A -> C: 1.0 ve B -> C: 2.0, bağımlılık yönetimi yoluyla, A yapısında, normalden beklediğiniz gibi, C: 1.0 yerine C: 2.0 alırsınız. geçiş bağımlılık kuralları. İstediğiniz sürümü almak için A: C: 1.0'a zorlamak için bağımlılık yönetimi kullanmalıdır. Bu nedenle: viral. –

+1

Evet, Bağımlılık Yönetimi etiketini biliyorum, ancak bir projeye bağlı olarak bağımlılık sürümlerinin bir aracı olarak, hataya açık bir fazlalık olmadan, daha çok görüyorum. Bununla birlikte, her modülde bağımlılıkları kendilerinde beyan etmeniz gerekiyor. ** Tüm ** (ya da hemen hemen) modüllerin bazı bağımlılıkları paylaştığı bir durum düşünmekteyim: sürümden bağımsız olarak, ebeveyndeki (şu anda yaptığım gibi) _global_ bağımlılıklarını tanımlamak ya da Diğer tüm kişilerin bağımlı olduğu bu özel amaç için modül – Eleaar

+2

Yukarıda açıklandığı gibi bağımlılık Yönetimini kullanıyorum ve her modülün bağımlılıklarını modülün% 100'üne bağımlı olmadıkça modülün POM'sine bağımlı hale getiriyorum ... sonra da ana POM'a koydum. Her çocuk POM'da gerekli olmayan ana POM'a bağımlılık koymayın ve kesinlikle bağımlılıkları çekecek bir proje oluşturmayın. Bu bağımlılıkları çocuk modülleri arasında tekrarlamak çok da büyük bir şey değil çünkü üst sürümünde bağımlılıkManagement stanza olarak sürümü sağlamanız gerekmez. – HDave

0

İki makul seçenek görebilirsiniz:

İkinci seçenek birden fazla modül aynı büyük yığını bağlıdır olduğunda yararlıdır ortak modülünde

  • kullanın import scope ortak bağımlılıkları beyan Kendi bağımlılıklarının sayısı ile bileşenler.