2012-06-11 27 views
28

Ben bir Gradle acemi değilim. Projenin tüm geçiş bağımlılıklarını içeren bir uberjar (AKA fatjar) inşa etmek istiyorum. "Build.gradle" ye hangi satırları eklemem gerekiyor?Gradle ile bir uberjar oluşturma

Bu şu anda ne var: (Ben geri yere birkaç gün onu kopyalayarak, ama nereden Hatırlamıyorum.)

task uberjar(type: Jar) { 
    from files(sourceSets.main.output.classesDir) 

    manifest { 
     attributes 'Implementation-Title': 'Foobar', 
       'Implementation-Version': version, 
       'Built-By': System.getProperty('user.name'), 
       'Built-Date': new Date(), 
       'Built-JDK': System.getProperty('java.version'), 
       'Main-Class': mainClassName 
    } 
} 
+2

Bunun yerine, [uygulama eklentisini] (http://www.gradle.org/docs/current/userguide/application_plugin.html) kullanmayı deneyebilirsiniz. – Scott

+0

Bu, bağımlılığınız olmadığı sürece çalışacaktır. Ama projenizin bağımlılıkları olduğunda, bunlar uberjar'a eklenmez. –

cevap

29

Eğer gradle cookbook yılında fatjar örneğini denediniz mi? dışlamaları ihtiyaç vardır

jar { 
    from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) { 
     exclude "META-INF/*.SF" 
     exclude "META-INF/*.DSA" 
     exclude "META-INF/*.RSA" 
    } 

    manifest { 
     attributes 'Implementation-Title': 'Foobar', 
       'Implementation-Version': version, 
       'Built-By': System.getProperty('user.name'), 
       'Built-Date': new Date(), 
       'Built-JDK': System.getProperty('java.version'), 
       'Main-Class': mainClassName 
    } 
} 

nedeniyle yokluğunda sen this sorunu vuracaktır:

Ne aradığınız gradle

+0

İşaretçi için teşekkürler. Bu yardımcı oldu. Yine de, biraz uğraşarak çözülen başka bir soruna rastladım. Bunun üzerine genişleyen başka bir cevap ekleyeceğim. – missingfaktor

+0

Yemek kitabı şimdi bir giriş gerektiriyor gibi görünüyor. Tam olarak aradığım şey olduğu için tarifi buraya yapıştırır mısınız lütfen? – tarzan

+0

@tarzan üç yıl sonra ve şimdi gölge eklentisini kullanacağım https://github.com/johnrengelman/shadow –

34

için the shadow plugin olan aşağıdaki ile task uberjar(.. değiştirilmiştir.

+4

Sanırım tüm çalışma zamanı bağımlılıkları – lyomi

+0

içermek için kullanacağım 'configurations.runtime' i 'forma' eklemek için gerekli 'uvajar' java/main/resources 'içindeki dosyaları almak için – gladiator

5

Bu project çok yararlı buldum. Bir referans olarak kullanıyorum, Gradle uberjar görevim

task uberjar(type: Jar, dependsOn: [':compileJava', ':processResources']) { 
    from files(sourceSets.main.output.classesDir) 
    from configurations.runtime.asFileTree.files.collect { zipTree(it) } 

    manifest { 
     attributes 'Main-Class': 'SomeClass' 
    } 
} 
+0

geçersiz imzalı dosya özetini aldım Manifest ana öznitelikler için bu –

+0

denediğinizde "dışlamak" gerekir "META-INF/*. SF" ' ' dışla "META-INF/*. DSA" ' ' dışla "META-INF/*. RSA" ' kayıpçıların ans'ı gibi wer –

5

Bunu java modülünüzün build.gradle dosyasına ekleyin.

mainClassName = "my.main.Class"

jar { 
    manifest { 
    attributes "Main-Class": "$mainClassName" 
    } 

    from { 
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } 
    } 
} 

Bu/yapı/kütüphaneleri/[modül_ismi] Jar dosya [modül_ismi] neden olur.

+0

ama bu kod nedir? Configurations.compile.collect {it.isDirectory() nedir? it: zipTree (it)} yapmak? –

+1

@SamRedway 'configurations.compile.collect'' derlenenden 'topladığı şeyler toplar Üçlüsü, hem klasörlere hem de zip dosyalarına (kavanoz gibi) aynı dosyalarda sanki – pal

+0

klasörlerini çağırabiliyordu. burada, ama bu güzel çalışıyor ve güzel ve basit. – chris

İlgili konular