2013-05-04 13 views
7

Ich mag eine neue Aufgabe in meinem Projekt erstellen wäre zu erstellen, die ein jar-Archiv mit den Klassendateien meines Projektes und den Klassendateien von der schafft Abhängigkeiten (auch 'schattiertes Glas' oder 'Fettglas' genannt).Gradle: ‚Klon‘ original jar Aufgabe eine neue Aufgabe für ein Glas mit Abhängigkeiten

Die Lösung des Gradle Kochbuch ändert die Standard-jar Aufgabe des JavaPlugin vorgeschlagen:

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

Allerdings würde Ich mag den ursprünglichen jar taks halten, da sie eine zusätzliche Aufgabe für das shaeded Glas ist und habe , dh eine Aufgabe, die genau wie die jar Aufgabe verhält, enthält aber die zusätzlichen Dateien nach

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

und hat einen weiteren Sichter ('schattiert).

habe ich versucht, über die Konfiguration der jar Aufgabe wie diese durch Kopieren Eigenschaften zu nehmen:

task shadedJar(type: Jar, dependsOn: configurations.compile) { 
    dependencies = tasks.jar.taskDependencies 
    source = tasks.jar.source 
    manifest = tasks.jar.manifest 
    includes = tasks.jar.includes 
    classifier = 'shaded' 

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

Aber die daraus resultierenden Aufgaben übernehmen nicht die Abhängigkeiten von ‚Glas‘ und das resultierende Glas beinhaltet nicht die Projektklassendateien. Darüber hinaus scheint dieser Ansatz die empfohlene Methode zu sein, eine vorhandene Aufgabe als Vorlage für eine neue Aufgabe zu verwenden.

Was wäre ein empfehlenswertes Konzept für meinen spezifischen Bedarf (die separate shadedJar Aufgabe) und für ‚Klonen‘ Aufgaben sie als Vorlagen für zusätzliche Aufgaben im Allgemeinen zu benutzen?

(Ich bin derzeit noch auf Gradle 1.3, sondern Lösungen für die aktuelle Gradle Version sind auch willkommen)

Antwort

8

Es gibt keine integrierte Möglichkeit, Aufgaben zu klonen. Allerdings ist es einfach, die fatJar Aufgabe zu konfigurieren jar Aufgabe, die gleichen Dateien wie der java Plugins enthalten:

task fatJar(type: Jar) { 
    appendix = "fat" 
    from sourceSets.main.output // that's it 
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
} 

Aufgabe autowiring die notwendige Aufgabe Abhängigkeiten automatisch einzurichten.

Wenn das Build-Skript auf geht die jar Aufgabe anpassen, können Sie die Anpassungen für beide Aufgaben gleichzeitig gelten:

configure([jar, fatJar]) { 
    version = "2.0" 
    entryCompression = "STORED" 
} 

Wenn, anders als im Fall der jar Aufgabe, definieren Sie die „Vorlage“ selbst Sie können mit einem Factory-Methode "instanziiert" it:

def getMeAnotherOne(String name) { 
    task(name, type: Jar) { 
     version = "2.0" 
     entryCompression = "STORED" 
    } 
} 

getMeAnotherOne("jar1") 
getMeAnotherOne("jar2") 
Verwandte Themen