2009-05-03 14 views
25

Projem, bir geçiş bağımlılığı olarak listelendiğinden bir jar dosyası içeriyor.Maven: Tek geçişli bağımlılığı kaldırma

Ancak, yalnızca ona ihtiyacım olmadığını doğruladım, ancak sorun değil, çünkü jar dosyaları içindeki bir sınıf, başka bir jar dosyasında ihtiyacım olan bir sınıfı gölgeler.

Geçiş bağımlılıklarından tek bir jar dosyasını nasıl bırakırım?

cevap

30

: maven website itibaren

Hariç tutma mekanizmasını kullanmaktır, ancak bazen çok sayıda art arda görmezden gelmek istediğiniz aynı geçiş bağımlılığına sahip olduğunda çok sayıda istisna eklemekten kaçınmak için aşağıdaki hacki kullanmayı tercih edebilirsiniz. Bir hariç tutmayı belirtmek yerine, "sağlanan" bir kapsamla ek bir bağımlılık tanımlarsınız. Bu, Maven'e bu eseri çalışma zamanında sağlayarak elinize alacağınızı ve böylece paketlenmeyeceğini söyler. Örneğin:

<dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring</artifactId> 
      <version>2.5.6</version> 
    </dependency> 
    <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.1.1</version> 
      <scope>provided</scope> 
    </dependency> 

Yan etkisi: Eğer bir sürümünü belirtmelisiniz eser-to-göz ardı ve onun POM derleme sırasında alınır; Bu, normal istisnalarla ilgili değildir. Özel Maven havuzunuzu bir güvenlik duvarının arkasında çalıştırırsanız, bu sizin için bir sorun olabilir.

3

Bunu, sorunlu artefaktları açıkça dışlayarak yapabilirsiniz. Sorunu içeren bağımlılık alın ve işaretlemek dışlanacak:

 <dependency> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring</artifactId> 
       <version>2.5.6</version> 
       <exclusions> 
         <exclusion> 
           <groupId>commons-logging</groupId> 
           <artifactId>commons-logging</artifactId> 
         </exclusion> 
       </exclusions> 
     </dependency> 
15

doğru yolu: Aşağıdaki şekilde bir bağımlılık hariç tutabilir

<dependency> 
    <groupId>group-a</groupId> 
    <artifactId>artifact-a</artifactId> 
    <version>1.0</version> 
    <exclusions> 
    <exclusion> 
     <groupId>group-c</groupId> 
     <artifactId>excluded-artifact</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 
+0

ben ole yöntemle bir kavanoz bağımlılık dışına servlet-api hariç çalışıyordum ve bu benim için işe yaramadı ama bu yöntemi denedim ve hile yaptı. Teşekkürler. – Aaron

+0

bu, tabanlı bir bağımlılığı hariç tuttuğumda benim için çalıştı. Teşekkürler! –

+0

Ayrıca, bağımlılığınız JRE'ye dahil edilmişse, _system_ kapsamını da kullanabilirsiniz. Jaxb-api 2.0 ve JRE 6 ile örnek olarak bkz. [Maven System Dependencies] (http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#System_Dependencies) –

İlgili konular