Spring Tool Suite

Der aktuelle Milestone M13 von STS4 basiert auf dem final Release von Eclipse Photon 4.8.

Changelog

Zu den Highlights der Milestones gehören:

Spring Boot

  • Es können jetzt Änderungen an geänderten Bean Definitionen in laufenden (und neugestarteten) Spring Boot Anwendungen erkannt werden.
  • Die Live Hovers unterstützen jetzt @Inject Annotationen
  • Es kann das Matching auf Projekt und Workspace Ebene angepasst werden
  • Verbesserungen im JMX Connector

Concurse

  • Alle GitGetParams werden nun zur Verfügung gestellt: submodule_recursive, submodule_remote, clean_tags

Eclipse

  • Die Spring Starter Wizards (Neu und Edit) zeigen beide nun Informationen über deaktivierte Module an (Erklärung warum sie deaktiviert worden sind)
  • Edit Starters behandelten das Entfernen von Abhängigkeiten nicht korrekt

Atom Editor

  • Die Project Resolution funktioniert mit >= JDK9

Neuer Milestone M12 erreicht

Am 14.06.2018 wurde der Milestone M12 freigegeben. Mit der Freigabe wurden diverse Bugs behoben und einige Verbesserungen vorgenommen:

  • JDK 9 und JDK 10 werden unterstützt, auch wenn die IDE unter JDK 8 läuft
  • Die Live Hoovers werden jetzt in allen geöffneten Editoren aktualisiert
  • Etliche NPE im Indexer wurden beseitigt

Siehe Changelog

Default ComponentScan von SpringBoot

SpringBoot prüft beim Starten alle Packages die in dem gleichen Package und unterhalb des Packages der @SpringBootApplication Annotations Klasse zu finden sind.

Das Default verhalten überschreiben

Möchte man die Struktur der Anwendung umändern, so muss man die Spring Boot mitteilen wo die Komponenten zu finden sind. Anderenfalls wird der Start der Anwendung zu Fehlern führen, da SpringBoot nicht alle Komponenten finden kann. Hierfür kann man z.B. an der Klasse, die die @SpringBootApplication Annotation besitzt, die Annotation @ComponentScan anfügen. Mit ComponentScan(BasePackages = {“”}) kann man als StringArray die Packages angegeben in denen die Komponenten zu finden sind.

Achtung: Komponenten die in oder unterhalb der @SpringBootApplication Klasse sich befinden müssen ebenfalls angegeben werden, da hier das Default Verhalten von SpringBoot überschrieben worden ist.

Spring Boot mit Hibernate

Kommt es beim Starten einer Spring Boot Anwendung zu einer ClassNotFoundException, weil die javax.xml.bind.JAXBException nicht gefunden worden ist, dann fehlt hier die Dependency für JAXB.

Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499) ~[na:na]

Hibernate benötigt typischerweise JAXB, welches per default ab Java 9 nicht mehr sichtbar ist. Entweder mit –add-modules java.xml.bind zur Laufzeit oder als Abhängigkeit einbinden.

Dependency JAXB hinzufügen

Unter Gradle (letzte Version unter Maven Central suchen JAXB)

compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'

Neuer Milestone M11 erreicht

Die Spring Tool Suite hat mit M11 einen neuen Milestone erreicht

Aus dem Changelog kann man die Unterstützung des JDK10 entnehmen. Das scannen der Projekte wurde bescheunigt, indem der gesamte Prozess jetzt auf dem Java Tooling von Eclipse beruht. Die Spring Tool Suite basiert ab sofort auf Photon. Es wird der letzte Milestone (aktuell ist Photon M6) verwendet.

Fazit

Insgesamt macht die Suite einen guten Eindruck. Probleme die zuvor bestanden existieren nicht mehr und der Workspace kann mit aktuellen Java Projekten verwendet werden. Ich bin weiter gespannt wie sich das Produkt entwickelt.

Download

Die aktuelle Version kann von https://spring.io/tools4 heruntergeladen werden.

Spring Tool Suite

Die Spring Tools Suite ist noch in der Betaphase und noch nicht im Gegensatz zur Eclipse Oxigen oder Photon IDE vollumfänglich (changelog) unter neueren Java Versionen lauffähig. Dieses macht sich in Abstüzen im gesamten Programm bemerkbar. Pivotal empfiehlt STS 4 noch unter Java 8 laufen zu lassen.

Eclipse.ini

Die zu startende VM (siehe WIKI) kann im .ini File angegeben werden.

-vm
/usr/lib/jvm/java-8-openjdk/bin/java

Die Konfiguration von Eclipse bzw. der Spring Tool Suite kann über About –> Installation details –> Configuration abgelesen werden. Hier taucht dann die verwendete JVM auf. java.version=1.8.0_162.

STS 4 unter Archlinux

Im offiziellen Wiki von Archlinux wird auf ein kleines Skript verwiesen um Programme unter einer anderen JVM zu starten.

#!/bin/sh
export PATH=/usr/lib/jvm/java-8-jdk/jre/bin/:$PATH exec "$@"

unter ~/Bin abspeichern und /Bin z.B. in der ./.bashrc zum Pfad hinzufügen.

# add Bin to Path
PATH=${PATH}:~/Bin

Erweiterte Funktionen laufen nur unter JDK

Eine der erweiterten Funktionen laufen nur unter einer JDK. Siehe Eclipse.ini. Dazu gehört z.B. die live hover information.

Spring Tool Suite 4 mit Lombok verwenden

Der Installer im lombok.jar erkennt das Executable der Spring Tool Suite nicht. Lombok kann jedoch trotzdem verwendet werden. Es muss die händische Installation erfolgen.

Manuelle Installation

Lombok.jar in das Root Verzeichnis kopieren

Anpassung der .ini Datei

Es muss wie bei der normalen händischen Installation der Java Agent von lombok hinzugefügt werden. Dazu im Abschnitt für die JVM Parameter den Agenten (in der Regel am Ende) einfügen.

-vmargs
-Dosgi.requiredJavaVersion=1.8
--add-modules=ALL-SYSTEM
-Xms40m
-Xmx1200m
-javaagent:lombok.jar

Erfolgreiche Installation prüfen

Nach Neustart der Workbench sollte unter About Spring Tool Suite 4 folgender Eintrag zu finden sein:

Lombok v1.16.20 “Dancing Elephant” is installed. https://projectlombok.org/

Spring Boot Properties Migrationshilfe

Um die Migration von Anwendungen von 1.x nach 2.0 zu erleichtern, gibt es das spring-boot-properties-migrator Modul. Es ersetzt zur Laufzeit alle alten Keys durch die korrespondieren neuen Keys und gibt Migrationhinweise auf dem Log aus. Es empfiehlt sich also die Abhängigkeit mit einzubinden.

compile group: 'org.springframework.boot', name: 'spring-boot-properties-migrator', version: '2.0.0.RELEASE'

In Spring gibt es mehrere Möglichkeiten woher ein Wert für eine Property kommen kann. In Spring Boot 2.0 wird in Actuator Environment dieses jetzt genau ausgegeben woher der Wert (inkusive Angabe der Zeilennummmer) stammt. Dieses kann zu Debuggingzwecken recht nützich sein, wenn Mal nicht klar sein sollte wie der Wert aktuelle zustande kommt.

Dependency Spring Boot

spring-boot-starter-actuator

Abruf des Actuators Environment

localhost:8080/actuator/env

siehe https://youtu.be/TasMZsZxLCA?t=1863