Ich habe einen Multiprojekt-Build und habe die Aufgabe gestellt, in einem der Teilprojekte ein Fettglas zu bauen. Ich habe die Aufgabe ähnlich der im Kochbuch beschriebenen erstellt .
jar {
from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
manifest { attributes 'Main-Class': 'com.benmccann.gradle.test.WebServer' }
}
Das Ausführen führt zu folgendem Fehler:
Ursache: Sie können keine Konfiguration ändern, die sich nicht im ungelösten Zustand befindet!
Ich bin mir nicht sicher, was dieser Fehler bedeutet. Ich habe dies auch auf dem Gradle JIRA gemeldet, falls es sich um einen Fehler handelt .
def mainClassName
, damit der Code funktioniert ... Ich erhielt Die unbekannte Eigenschaft 'mainClassName' für das Root-Projekt konnte nicht festgelegt werdenimplementation
Konfiguration anstelle der jetzt veraltetencompile
. Der obige Code baut mir ein kleines Glas ohne die Abhängigkeiten auf. Wenn ich es ändere (from { configurations.implementation.collect {...} }
), tritt ein Fehler auf, der besagt, dass das direkte Auflösen der Konfigurationsimplementierung nicht zulässig istconfigurations.compileClasspath
wird alleimplementation
s reparieren , aber dieapi
Abhängigkeiten afik weglassen. Hier in einer anderen Antwort die Lösung gefundenruntimeClasspath
. Das schließt auch dieapi
Abhängigkeiten ein.Die Antwort von @felix hätte mich fast dorthin gebracht. Ich hatte zwei Probleme:
Das folgende Setup behebt dieses Problem
Fügen Sie Folgendes hinzu, um dies zur Standard-Assembler- oder Build-Aufgabe hinzuzufügen:
Bearbeiten: dank @mjaggard: in neueren Versionen von Gradle wechseln Sie
configurations.runtime
zuconfigurations.runtimeClasspath
quelle
artifacts
: genau das, wonach ich gesucht habe.gradle fatJar
die Laufzeitabhängigkeiten ausführen, scheinen sie nicht kompiliert zu sein, sodass sie nicht kopiert werden können.Wenn Sie möchten, dass sich die
jar
Aufgabe normal verhält und eine zusätzlichefatJar
Aufgabe hat, verwenden Sie Folgendes:Der wichtige Teil ist
with jar
. Ohne sie sind die Klassen dieses Projekts nicht enthalten.quelle
group "build"
und diese Aufgabe wird inbuild
Gruppe sein (mit anderen Aufgaben, dhjar
Aufgabe.with jar
Keyword finden. Was genau macht es?Das funktioniert gut für mich.
Meine Hauptklasse:
Und es ist der Inhalt meiner Datei build.gradle:
Und ich schreibe folgendes in meine Konsole:
Und die Ausgabe ist großartig:
quelle
Um eine fette JAR mit einer ausführbaren Hauptklasse zu generieren und Probleme mit signierten JARs zu vermeiden, empfehle ich das Gradle-One-Jar-Plugin . Ein einfaches Plugin, das das One-JAR-Projekt verwendet .
Einfach zu verwenden:
quelle
Einfache Lösung
quelle
Die Antwort von @ben funktioniert fast für mich, außer dass meine Abhängigkeiten zu groß sind und ich den folgenden Fehler erhalten habe
Um dieses Problem zu beheben, muss ich den folgenden Code verwenden
quelle
Für diejenigen, die mehr als ein Glas aus dem Projekt bauen müssen.
Erstellen Sie eine Funktion in Gradle:
Dann ruf an:
Funktioniert auf Gradle 5.
Jar wird bei platziert
./build/libs
.quelle
Ich benutze Aufgabe
shadowJar
per Plugin. com.github.jengelman.gradle.plugins:shadow:5.2.0
Die gerade ausgeführte
./gradlew app::shadowJar
Ergebnisdatei wird bei verwendetMyProject/app/build/libs/shadow.jar
build.gradle
Datei der obersten Ebene :App-Modul-Level-
build.gradle
Dateiquelle
Gradle 6.3, Java-Bibliothek. Der Code aus "jar task" fügt die Abhängigkeiten zur "build / libs / xyz.jar" hinzu, wenn die Aufgabe " gradle build " ausgeführt wird.
quelle
Wenn Sie an Ameisen gewöhnt sind, können Sie dies auch mit Gradle versuchen:
quelle