KAPITEL 2
Ihre Werkzeuge auswählen und beginnen
Wie Sie bald sehen werden, ist es einfach, mit dem Erstellen von Spring-Boot-Anwendungen anzufangen. Der schwierigste Teil dürfte sein, zu entscheiden, welche der verfügbaren Möglichkeiten Sie wählen sollten. In diesem Kapitel schauen wir uns einige der ausgezeichneten Möglichkeiten an, die für Sie verfügbar sind, um Spring-Boot-Anwendungen herzustellen: Build-Systeme, Sprachen, Toolchains, Codeeditoren und so weiter. Maven oder Gradle?
Java-Anwendungsentwicklern standen immer schon mehrere Build-Werkzeuge für ihre Projekte zur Verfügung. Einige von ihnen sind mit der Zeit – aus gutem Grund – aus der Mode geraten, sodass heute vor allem zwei Werkzeuge verwendet werden: Maven und Gradle. Spring Boot unterstützt beide gleichermaßen. Apache Maven Maven ist eine beliebte und solide Wahl für ein Build-Automatisierungssystem. Es existiert schon eine ganze Weile: Nachdem es 2002 erschienen ist, wurde es 2003 zu einem der wichtigen Projekte der Apache Software Foundation erklärt. Sein deklarativer Ansatz war zu damaliger Zeit und ist auch heute noch konzeptuell einfacher als die Alternativen: Sie erzeugen einfach eine XML-formatierte Datei namens pom.xml mit den gewünschten Abhängigkeiten und Plug-ins. Wenn Sie den Befehl mvn ausführen, können Sie eine »Phase« angeben, die fertiggestellt werden soll. Dadurch wird eine gewünschte Aufgabe ausgeführt, wie das Kompilieren, Entfernen früherer Ausgaben, Verpacken, Ausführen einer Anwendung und so weiter: 4.0.0 org.springframework.boot spring-boot-starter-parent 2.4.0 com.example demo 0.0.1-SNAPSHOT demo Demo project for Spring Boot 11 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin Maven erzeugt und erwartet per Konvention außerdem eine spezielle Projektstruktur. Es ist nicht ratsam, von dieser Struktur abzuweichen, wenn Sie nicht gerade planen, sich mit Ihrem Build-Werkzeug herumzustreiten, was eine wirklich schlechte Idee wäre. Für die große Mehrheit der Projekte funktioniert die konventionelle Maven-Struktur ganz hervorragend, sodass Sie hier kaum etwas ändern müssen. Abbildung 2-1 zeigt eine Spring-Boot-Anwendung mit der typischen Maven-Projektstruktur. Abbildung 2-1: Maven-Projektstruktur in einer Spring-Boot-Anwendung Näheres über die Projektstruktur, die Maven erwartet, erfahren Sie in The Maven Project’s Introduction to the Standard Directory Layout (https://oreil.ly/mavenprojintro). Falls einmal der Zeitpunkt kommt, an dem die Projektkonventionen von Maven und/oder das eng strukturierte Vorgehen für Builds Sie zu sehr einschränken, haben Sie eine andere ausgezeichnete Möglichkeit. Gradle Gradle ist eine andere beliebte Möglichkeit für das Erstellen von Java-Virtual-Machine-(JVM-)Projekten. Veröffentlicht im Jahre 2008, nutzt Gradle eine domänenspezifische Sprache (Domain Specific Language; DSL), um die Build-Datei build. gradle anzulegen, die sowohl minimal als auch flexibel ist. Hier sehen Sie ein Beispiel einer Gradle-Build-Datei für eine Spring-Boot-Anwendung. plugins { id 'org.springframework.boot' version '2.4.0' id 'io.spring.dependency-management' version '1.0.10.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' testImplementation 'org.springframework.boot:spring-boot-starter-test' } test { useJUnitPlatform() } Gradle erlaubt Ihnen als Entwickler, als DSL die Programmiersprachen Groovy oder Kotlin zu verwenden. Außerdem besitzt es verschiedene Eigenschaften, die dazu dienen, die Wartezeit beim Building eines Projekts zu verringern: inkrementelles Kompilieren von Java-Klassen Vermeiden des Kompilierens für Java (in Fällen, in denen keine Änderungen aufgetreten sind) einen dedizierten Dämon für die Projektkompilierung Die Wahl zwischen Maven und Gradle Augenscheinlich überwiegen die Vorteile von Gradle … warum also nicht einfach dieses Build-Werkzeug nutzen? Mavens strengerer deklarativer (manche sagen sogar starrsinniger) Ansatz sorgt jedoch dafür, dass die Dinge von Projekt zu Projekt und von Umgebung zu Umgebung unglaublich konsistent bleiben. Wenn Sie den Maven-Weg gehen, treten üblicherweise kaum Probleme auf. Sie können sich also auf Ihren Code konzentrieren, ohne sich große Gedanken um den Build machen zu müssen. Als Build-System, das auf Programmierung/Skripting setzt, hat Gradle gelegentlich auch Probleme mit ersten Fassungen von neuen Sprachversionen. Das Gradle-Team reagiert normalerweise sehr schnell und räumt diese Probleme aus, doch falls Sie sofort auf frühe Sprachversionen wechseln wollen oder müssen, sollten Sie dies beachten. Gradle kann für Builds schneller sein – manchmal sogar signifikant schneller, vor allem in größeren Projekten. Bei Ihren typischen microservicebasierten Projekten werden sich die Build-Zeiten zwischen vergleichbaren Maven- und Gradle-Projekten jedoch wahrscheinlich kaum unterscheiden. Die Flexibilität von Gradle kann bei einfachen Projekten und bei Projekten mit sehr komplexen Build-Anforderungen sehr erfrischend sein. Allerdings kann sie vor allem in diesen komplexen Projekten auch bedeuten, dass Sie mehr Zeit zum Anpassen und zur Fehlersuche benötigen, falls etwas nicht so funktioniert, wie Sie es erwarten. Alles hat seinen Preis. TANSTAAFL (There Ain’t No Such Thing as a Free Lunch). Spring Boot unterstützt sowohl Maven als auch Gradle. Wenn Sie den Initializr benutzen (auf den wir in einem folgenden Abschnitt eingehen werden), werden das Projekt und die gewünschte Build-Datei für Sie angelegt, sodass Sie schnell loslegen können. Spring Boot hilft Ihnen in jedem Fall gerne. Java oder Kotlin?
Es gibt zwar viele Sprachen, die man in der JVM benutzen könnte, doch zwei sind ganz besonders weit verbreitet. Eines ist die ursprüngliche JVM-Sprache: Java; die andere ist relativ neu in dem Bereich: Kotlin. Beide sind in Spring Boot voll einsatzfähig. Java Je nachdem,...