Boehrsi.de - IT und Gaming Blog

IntelliJ IDEA + GUI Builder + Gradle - How to

IntelliJ IDEA + GUI Builder + Gradle - How to Bild

Von Zeit zu Zeit baue ich Java Programme mit einem User Interface. Dies tue ich gerne mit dem IDEA GUI Designer, denn auch wenn Java UI generell eher nicht das idealste ist, manchmal ist sie einfach passend für den Einsatzzweck.
Zusätzlich nutze ich aber auch gerne Gradle als Build-Tool meiner Wahl. Die Kombination aus Gradle + IntelliJ IDEA + GUI Designer ist aber leider etwas problematisch und so hatte ich einige Probleme nach diversen Updates meiner Projekte, eine lauffähige JAR zu erzeugen.
Um euch diese Arbeit zu ersparen habe ich aus verschiedenen Stack Overflow Beiträgen (Beitrag #1 open_in_new, Beitrag #2 open_in_new, Beitrag #3 open_in_new) und der offiziellen Dokumentation für Gradle Einstellungen zusammengesucht, welche ich an euch weiterleiten möchte.
Initial benötigt ihr die forms_rt.jar aus dem JetBrains/IntelliJ IDEA Community Edition/IntelliJ IDEA Community Edition/lib Ordner in eurem Projekt. Um dies zu erreichen und auch Updates automatisch mitnehmen zu können, habe ich einfach einen Symlink erstellt. Somit liegt die Datei nun ebenfalls in meinem Projekt im libs Ordner. Ihr könnt die Datei aber natürlich auch einfach manuell in euer Projekt kopieren.

Zusätzlich sollte eure build.gradle Datei konfiguriert werden.

plugins {
    id 'java'
}

...

jar {
    manifest {
        attributes 'Main-Class': 'main.Main'
    }
}

task fatJar(type: Jar) {
    manifest.from jar.manifest
    from {
        configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) }
    }
    with jar
}

repositories {
    flatDir dirs: "${rootDir}/libs"

    ...
}

dependencies {
    compile name: 'forms_rt'

    ...
}

Hier habe ich einen generellen jar Task und den eigentlichen fatJar Task. Letzterer wird aktiv genutzt, um das Projekt zu bauen und die JAR zu erzeugen. Hierfür wird der manifest Eintrag des jar Tasks übernommen und alle nötigen Konfigurationen eingesammelt. Dadurch sind später alle Abhängigkeiten des Projekts in eurer JAR enthalten. Wichtig ist hier configurations.runtime zu nutzen, da ansonsten Einträge fehlen können.
Da es leider keine aktuelle Version aus Repositories gibt, habe ich mittels flatDir dirs: "${rootDir}/libs" und compile name: 'forms_rt' die Forms Library manuell eingebunden. Definitiv unschön, aber derzeit wohl die einzige gangbare Lösung. Hier sollte IntelliJ meiner Meinung nach noch nachbessern.

Nachdem ihr nun die Library habt und prinzipiell auch die richtige Konfiguration des Build-Toolings, muss IDEA selbst noch eingestellt werden. Unter File | Settings | Editor | GUI Designer muss Generate GUI into auf Java source code gestellt werden. Ich habe ebenfalls Automatically copy from runtime classes to the output directory aktiviert.
Ebenfalls muss unter File | Settings | Build, Execution, Deployment | Build Tools | Gradle sowohl Build and run using, wie auch Run tests using auf IntelliJ IDEA gestellt werden. Sofern ihr eine der IntelliJ IDEA Einstellungen vergesst, kommt es entweder zu Build-Fehlern beim Bauen via IDEA / Gradle Task oder beim Start der Anwendung gibt es Probleme mit der generierten UI (fehlende Klassen, fehlende Code Updates).
Mit diesen Einstellungen kann ich sowohl aus IDEA heraus alles starten, wie auch über den Gradle Task die finale JAR bauen. Alles wird immer frisch erzeugt, sodass die jeweiligen Artifacts auch immer den aktuellen Stand des Programms widerspiegeln.

Related Links
Teilen und RSS-Feeds abonnieren
Twitter Facebook RSS
Kommentare  
Mit dem Abschicken des Kommentars erklären sie sich mit der in der Datenschutzerklärung dargelegten Datenerhebung für Kommentare einverstanden.