Ein aktueller Status von dem Projekt Lombok

Hier ein kurzer Zwischenbericht über den aktuellen Stand JDK, Eclipse (STS4 Version), Gradle mit Lombok.

JDK10

Als Vorbereitung Java 10 installieren…

yaourt --noconfirm -S jre10-openjdk-headless jre10-openjdk jdk10-openjdk openjdk10-doc openjdk10-src

08.08.2018

Eclipse STS4 in M12 ist entpackt. Ich habe die aktuellste Version von Lombok mit dem integrieren Installer installiert. Auf dem Arch Linux System wird hier der absolute Pfad eingetragen. Leider gibt es folgenden Fehler:

16.08.2018

Hurra! Es ist geschafft. Endlich läuft Eclipse mit Gradle und Lombok unter einer Java Version > 8 !!! Aktuell verwende ich das letzte Milestone-Release M14 der STS14 mit der letzten Version v1.18.2 und der letzten Gradle Version 4.9.

JDK11

16.08.2018

Achtung: es gibt kein offizielles Paket für die EA-Version. Man findet sie auch nicht so leicht im AUR, da dass Paket jdk-devel heißt. Besser wäre jdk11-ea. Dann würde mann es mit yaourt -s jdk11 auch als EA finden.

yaourt --noconfirm -S jdk-devel
sudo archlinux-java set java-11-jdk

Auch hier gibt es offenbar keine Probleme mehr…

Benutzung von Gradle über die Kommandozeile

Das Buildsystem Gradle ist per se IDE agnostisch und daher lässt es sich natürlich über die Shell benutzen. Die weit verbreitete Linux-Shell Bash besitzt die vielseitige Autovervollstädigung über die Tabulatortaste. Da die Vervollständigung Kontextbezogen ist, werden auch nur die validen Optionen angezeigt.

Autovervollständigung für Gradle

Eric Wendelin hat nun eine Erweiterung gradle-completion für die Shells ZSH und Bash programmiert. Damit funktioniert die Autovervollständigung auch mit Gralde.

PKGBUILD für Arch basierte Distributionen

Da ich noch keine Zeit hatte es auf AUR zur Verfügung zu Stellen, hier ein PKGBUILD:

# Maintainer: MrPeacock
pkgname=gradle-completion
pkgver=1.3.0
pkgrel=1
pkgdesc="Bash and Zsh completion support for Gradle."
arch=(any)
url="https://github.com/gradle/gradle-completion"
license=('MIT')
depends=('bash' 'bash-completion')
makedepends=('git')
source=('gradle-completion::git+https://github.com/gradle/gradle-completion.git')
md5sums=('SKIP')

package() {
  mkdir -p $pkgdir/etc/bash_completion.d/
  cd gradle-completion
  cp gradle-completion.bash $pkgdir/etc/bash_completion.d/gradle-completion.bash    
}

Oder schnell installieren mit:

cd; mkdir gradle-completion; cd gradle-completion; curl https://mrpeacockgit.duckdns.org/Public/PublicFiles/raw/branch/master/PKGBUILDS/gradle-completion/PKGBUILD -o PKGBUILD; makepkg -i

Gradle Wrapper wirft Excetion

Beim Bauen eines Projektes mit dem Gradle Wrapper in der Verison 4.8 kommt es zu einer Excetion

> java.lang.ExceptionInInitializerError

wenn Gradle Wrapper mit OpenJDK > 9 gestartet wird. Mit JDK 8 und 9 tritt der Fehler nicht auf.

Gradle modularisieren

Es können externe Buildskripte eingebunden werden. Es macht mit wachsender Größe des Buildsriptes Sinn bestimmte Teile auszulagern. Diese externen Gradle Buildskripte sollten auch auf .gradle enden. Mit der apply from Anweisung kann Gradle externe Buildskripte inkludieren. Die Anweisung apply from erwartet eine URI als Parameter, so dass neben den lokalen Dateien auch Buildskripte von einem Webserver nachgeladen werden können. So können die Module zum Beispiel zentral verwaltet werden (lokaler Webserver).

Im Buildskript kann mit:

apply from: 'eclipse.gradle'

die nachfolgende eclipse.gradle eingebunden werden…

//
// Fix Modulepath
//
eclipse.classpath.file {
    whenMerged {
        entries.findAll { isModule(it) }.each { it.entryAttributes['module'] = 'true' }
    }
}

boolean isModule(entry) {
    // filter java 9 modules
    entry.kind == 'lib'  // Only libraries can be modules
}

Gradle Java Plugin

Das Gradle Java Plugin erlaubt das setzten der Source und Target-Compatability im Buildfile. Ist targetCompatability nicht gesetzt, so wird automatisch sourceCompatability gesetzt.

// Java 9
sourceCompatibility = 9
targetCompatibility = 9

// Java 10 (Fehler bei Eclipse < Photon M7)
sourceCompatibility = 10
targetCompatibility = 10

Hierbei ist anzumerken das Eclispe für Java 10 mit Hilfe des Gradle Java Plugins erst ab Photon M7 unterstützt. Bis M6 gibt es Fehlermeldungen, das diverse Java Sprachfeatures erst ab Java >= 5 zur Verfügung stehen. Eclipse interpretiert es wohl als 1.0 oder so.

Java Versionen

Die von Gradle unterstützten Java Versionen finden sich in der Dokumentation: JavaVersion