JARs bauen mit Gradle und Kotlin
Ich entwickle Java und Kotlin open_in_new Anwendungen in IntelliJ Idea open_in_new und aufgrund meines Android Backgrounds habe ich eine sehr positive Haltung gegenüber Gradle open_in_new als Build-Tool.
Ein Problem über welches ich bei dieser Kombination allerdings immer wieder stolpere, ist das Bauen der finalen Anwendung als JAR Datei. Diese benötige ich logischerweise zur Nutzung der Anwendung, z.B. auf meinem Server.
Bis dato setzte ich hier auf Idea und die dortige Erzeugung der Artifacts open_in_new. Dies funktionierte leider nur unzuverlässig, teils aufwendig und war mit viel Trail and Error verbunden. Vor allem hatte ich bei jedem neuen Projekt die gleichen Probleme und auch mein neues Kotlin Projekt war von selbigen Problemen betroffen.
Ich habe mich heute aus diesem Grund nach Alternativen umgeschaut und bin mit Gradle selbst auf eine extrem gute gestoßen. Denn Gradle bietet mit dem Application Plugin open_in_new eine funktionale und einfache Möglichkeit lauffähige Anwendungen Ready-To-Deploy zu bauen.
Ihr müsst lediglich das Application Plugin in eurer build.gradle Datei einbinden und schon ist das Plugin verfügbar.
plugins {
id 'application'
}
Konfiguriert werden muss lediglich der Name eurer Hauptklasse, sodass Gradle entsprechend ein passendes Linking vornehmen kann.
application {
mainClassName = 'org.gradle.sample.Main'
}
Sobald diese Dinge erledigt sind und Gradle die Änderungen angewendet hat, stehen euch neue Gradle Tasks zur Verfügung. Der application / run Task startet die Anwendung, im Prinzip identisch wie der Launch Button in eurer IDE.
Wesentlich interessanter sind die Tasks unter distribution, denn diese erstellen alle nötigen Dateien die für die Ausführung relevant sind.
- distTar erstellt euch eine .tar Datei mit allen Daten unter build/distributions
- distZip erstellt eine .zip Datei mit allen Daten unter build/distributions
- installDist erstellt einen Ordner mit allen Daten unter build/install
- assembleDist erstellt eine .tar und .zip Datei mit jeweils allen Daten unter build/distributions
Konkret erhaltet ihr einen lib Ordner, welcher alle Libraries enthält, inklusive eures eigenen Codes. Zusätzlich gibt es einen bin Ordner, welcher ein Launch-Script für Linux und Windows automatisch mitbringt.
Im Prinzip löst ihr nun also den gewünschten Task aus, packt die Dateien an den jeweiligen Ort, schmeißt vielleicht noch benötigte Config-Dateien dazu und schon seid ihr Ready-To-Go. Bezüglich den Config-Dateien und weiteren Pre- / Post-Build-Steps, bietet Gradle übrigens auch extrem viele Automatisierungsmöglichkeiten.