Mam kompilację z wieloma projektami i umieściłem zadanie zbudowania słoika z tłuszczem w jednym z podprojektów. Stworzyłem zadanie podobne do opisanego w książce kucharskiej .
jar {
from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
manifest { attributes 'Main-Class': 'com.benmccann.gradle.test.WebServer' }
}
Uruchomienie go powoduje następujący błąd:
Przyczyna: Nie możesz zmienić konfiguracji, która nie jest w stanie nierozwiązanym!
Nie jestem pewien, co oznacza ten błąd. Zgłosiłem to również w Gradle JIRA na wypadek, gdyby był to błąd .
def mainClassName
aby kod działał ... Otrzymałem Nie można ustawić nieznanej właściwości 'mainClassName' dla projektu głównegoimplementation
konfiguracji zamiast przestarzałejcompile
. Powyższy kod buduje mi mały jar bez zależności. Kiedy to zmieniam (from { configurations.implementation.collect {...} }
), pojawia się błąd mówiący, że bezpośrednie rozwiązanieconfigurations.compileClasspath
naprawi wszystkieimplementation
s, aleapi
pominie afik zależności. Znalazłem tutaj w innej odpowiedzi rozwiązanieruntimeClasspath
. Obejmuje toapi
również zależności.Odpowiedź @felix prawie mnie tam sprowadziła. Miałem dwa problemy:
Następująca konfiguracja rozwiązuje ten problem
Aby dodać to do standardowego zadania asemblacji lub kompilacji, dodaj:
Edycja: dzięki @mjaggard: w ostatnich wersjach Gradle zmień
configurations.runtime
naconfigurations.runtimeClasspath
źródło
artifacts
: dokładnie to, czego szukałem.gradle fatJar
zależności środowiska wykonawczego nie wydają się być skompilowane, więc nie można ich skopiować.Jeśli chcesz, aby
jar
zadanie działało normalnie, a także masz dodatkowefatJar
zadanie, użyj następujących:Ważna część to
with jar
. Bez tego zajęcia tego projektu nie są uwzględnione.źródło
group "build"
i to zadanie będzie wbuild
grupie (z innymi zadaniami, npjar
. Zadanie.with jar
słowa kluczowego, co dokładnie robi?U mnie to działa dobrze.
Moja klasa główna:
I to jest zawartość mojego pliku build.gradle:
W konsoli piszę:
A wynik jest świetny:
źródło
Aby wygenerować gruby plik JAR z główną klasą wykonywalną, unikając problemów z podpisanymi plikami JAR, proponuję wtyczkę gradle-one-jar . Prosta wtyczka korzystająca z projektu One-JAR .
Łatwy w użyciu:
źródło
Proste sulution
źródło
Odpowiedź z @ben prawie działa dla mnie, z wyjątkiem tego, że moje zależności są zbyt duże i otrzymałem następujący błąd
Aby rozwiązać ten problem, muszę użyć następującego kodu
źródło
Dla tych, którzy muszą zbudować więcej niż jeden słoik z projektu.
Utwórz funkcję w gradle:
Wtedy zadzwoń:
Działa na gradle 5.
Słoik zostanie umieszczony o godz
./build/libs
.źródło
Używam zadania
shadowJar
przez wtyczkę. com.github.jengelman.gradle.plugins:shadow:5.2.0
Użycie po prostu uruchom
./gradlew app::shadowJar
plik wynikowy będzie oMyProject/app/build/libs/shadow.jar
build.gradle
plik najwyższego poziomu :build.gradle
plik na poziomie modułu aplikacjiźródło
Gradle 6.3, biblioteka Java. Kod z „zadania jar” dodaje zależności do „build / libs / xyz.jar” podczas uruchamiania zadania „ gradle build ”.
źródło
Jeśli jesteś przyzwyczajony do mrówek, możesz spróbować tego samego z Gradle:
źródło