2014-05-13 57 views
39

Belirli dosyaları hariç tutmak için bir bağımlılık (geçiş bağımlılığı değil) indirilmesinden kurtulup çıkmadığını merak ediyorum.Gradle Bağımlılık içindeki belirli dosyaları hariç tut

Ant + Ivy'den Gradle'a bir yapı değiştiriyorum ve bu daha önce Ivy'de yapıldı. Soruyorum çünkü Artifactory'de bir çok derlenmiş wsdl kavanozunu içeren bir bağımlılık var, ama tüm kavanozları bağımlılık içinde indirmek istemiyorum.

Ivy yılında gibi ayarı: Bu 6 eserler bir dizin Repo/dep.location/Örneğin/7.3/kavanoz için Artifactory yayımlanır

.

<publications> 
    <artifact name="foo-1-0" type="jar" /> 
    <artifact name="foo-1-0-async" type="jar" /> 
    <artifact name="foo-1-0-xml" type="jar" /> 
    <artifact name="bar-1-0" type="jar" /> 
    <artifact name="bar-1-0-async" type="jar" /> 
    <artifact name="bar-1-0-xml" type="jar" /> 
</publications> 

Bu, altı eserin yalnızca iki tanesini nasıl alırım.

<dependency org="dep.location" name="example" rev="7.3" 
      conf="compile,runtime"> 
    <include name="foo-1-0-async"/> 
    <include name="foo-1-0-xml"/> 
</dependency> 

Şu anda Gradle'da benzer bir işlemi yapmaya çalışırsam, hariç tutulanlar göz ardı edilir ve altı eserin tamamı yüklenir.

compile (group:"dep.location", name:"example", version:"7.3") 
{ 
    exclude module:'foo-1-0-xml' 
    exclude module:'bar-1-0' 
    exclude module:'bar-1-0-async' 
    exclude module:'bar-1-0-xml' 
} 

Gradle sürüm 1.8 kullanıyorum.

+0

Hariç tutmaya çalıştığınız şeyler modüller değil, yapay nesnelerdir. Bildiğim Gradle'da bulunan yapay nesneleri dahil etmeme/hariç tutmanın tek yolu, buraya yardımcı olmayacak tiptedir. –

+0

Bu, desteklenmez. Ama bir alternatif, nasıl yapay olarak yayınladığın değişiyor. Neden bireysel jar dosyalarını artifactory'de yayınlamaya başlamıyorsunuz? – vkg

+0

Tamam, teşekkürler. – bhumphrey

cevap

3

Gradle'ın bunu başarmak için herhangi bir destek oluşturduğunu düşünmüyorum, ancak nesneleri sınıf yolundan kendiniz temizleyebilirsiniz. Gradle forumlarında this thread esinlenerek

Ben bu geldi: Gradle muhtemelen hala dosya indirmek ve bunları sizin için önbelleğe ancak bunlar sınıf yolunda olmamalı olacak

// The artifacts we don't want, dependency as key and artifacts as values 
def unwantedArtifacts = [ 
    "dep.location:example": [ "foo-1-0-xml", "bar-1-0", "bar-1-0-async", "bar-1-0-xml"], 
] 

// Collect the files that should be excluded from the classpath 
def excludedFiles = configurations.compile.resolvedConfiguration.resolvedArtifacts.findAll { 
    def moduleId = it.moduleVersion.id 
    def moduleString = "${moduleId.group}:${moduleId.name}:${moduleId.version}" // Construct the dependecy string 
    // Get the artifacts (if any) we should remove from this dependency and check if this artifact is in there 
    it.name in (unwantedArtifacts.find { key, value -> moduleString.startsWith key }?.value) 
}*.file 

// Remove the files from the classpath 
sourceSets { 
    main { 
     compileClasspath -= files(excludedFiles) 
    } 
    test { 
     compileClasspath -= files(excludedFiles) 
    } 
} 

Not söyledi.

+0

Gradle destek sağlamıştır. 'çözünürlük stratejisi' – smilyface

+0

Hangi artefaktların çözümlendiğini değiştirmek için çözünürlük stratejisini kullanabileceğinden emin değilim. – Raniz

1

İstediğiniz şey olup olmadığından emin değilim, ancak Spring Boot ve Wildfly'ı kullandığımızdan, tomcat başlangıç ​​modülünü yaylı önyükleme standart paketinden kaldırmamız gerekiyor ve bu sizinkilere çok benziyor. ve bitti. Ancak, bizim kod devletler: İlgili kavanoz indirilen veya değil sadece üzerinde sınıf değilse Kontrol etmedim

configurations { 
    compile.exclude module: "spring-boot-starter-tomcat" 
} 

, ben artık kullanılmadığını ancak biliyoruz.

İlgili konular