Machen Sie die SpringBoot1.5 + Gradle4.4 + Java8 + Docker-Umgebung mit Java11 kompatibel

Dieser Artikel ist der Artikel zum 15. Tag von Java Adventskalender 2019.

Einführung

Ich habe es für ungefähr ein Jahr verlassen, nachdem der kostenlose Support für Java 8 im Januar 2019 abgelaufen war. Da ich diesmal Zeit habe, habe ich auf Java 11 aktualisiert, das erste LTS seit 8. Es ist ein Memo zu dieser Zeit

Ich habe versucht, mit dem Schreiben zu beginnen, aber es scheint, dass OpenJDK 8 bis Juni 2023 unterstützt wird Ich hätte einfach von Oracle JDK zu Open JDK wechseln sollen ... Aber ich habe es getan, also werde ich es aufnehmen

JDK-Update

Installieren Sie AdoptOpenJDK 11

Geben Sie den folgenden Befehl ein, um das neueste JDK zu installieren

brew cask install adoptopenjdk

Derzeit ist JDK13 jedoch enthalten, sodass die Version angegeben werden muss, die die LTS-Version von JDK11 enthält. Suchen Sie nach der veröffentlichten Version

$ brew search adoptopenjdk
==> Casks
adoptopenjdk                       adoptopenjdk11-openj9-jre          adoptopenjdk12-openj9              adoptopenjdk13-jre                 adoptopenjdk8                      adoptopenjdk8-openj9-large
adoptopenjdk10                     adoptopenjdk11-openj9-jre-large    adoptopenjdk12-openj9-jre          adoptopenjdk13-openj9              adoptopenjdk8-jre                  adoptopenjdk9
adoptopenjdk11                     adoptopenjdk11-openj9-large        adoptopenjdk12-openj9-jre-large    adoptopenjdk13-openj9-jre          adoptopenjdk8-openj9
adoptopenjdk11-jre                 adoptopenjdk12                     adoptopenjdk12-openj9-large        adoptopenjdk13-openj9-jre-large    adoptopenjdk8-openj9-jre
adoptopenjdk11-openj9              adoptopenjdk12-jre                 adoptopenjdk13                     adoptopenjdk13-openj9-large        adoptopenjdk8-openj9-jre-large

Da ich dieses Mal JDK11 installieren möchte, geben Sie die Version mit dem folgenden Befehl an und installieren Sie sie

brew cask install adoptopenjdk11

Ändern Sie den vorhandenen Pfad in JDK11

export JAVA_HOME=`/usr/libexec/java_home -v 11`

Version prüfen

$ java -version
openjdk version "11.0.5" 2019-10-15
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.5+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.5+10, mixed mode)

Geben Sie JDK11 als Projekt-SDK von IntelliJ an

Öffnen Sie die Projektstruktur mit Befehl + und geben Sie JDK 11 für Project SDK und Project Language Lebel an.

Gradle aktualisieren

Gradle 4.4 unterstützt JDK 11 nicht und muss daher aktualisiert werden Es scheint, dass 5.0 und spätere Versionen unterstützt werden, aber da dies eine gute Idee ist, werde ich versuchen, es auf die aktuelle Version 6.0.1 zu bringen

Aktualisieren Sie gradle-wrapper.properties

Durch Aktualisieren der in gradle / wrapper / gradle-wrapper.properties aufgeführten Version wird die auf Ihr Projekt angewendete Version von Gradle geändert. Ändern Sie diesmal einfach den folgenden 4.4-Teil in 6.0.1.

distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-bin.zip

Gradlew aktualisieren

Das allein wird die Änderungen nicht auf Gradlew übertragen, also regenerieren Sie Gradlew

./gradlew wrapper

Gradle.build aktualisiert

Ändern Sie verschiedene Framework-Bibliotheken in mit JDK11 kompatible Grundsätzlich ist alles in gradle.build beschrieben, so dass Sie es ändern können

Ändern Sie die Java-Versionsspezifikation

Die Bedeutung jeder Spezifikation ist in Official beschrieben. Geben Sie also an, was Sie benötigen.

sourceCompatibility = 11
targetCompatibility = 11

Geändert zur Beschreibungsmethode der Gradle 6-Serie

Aktualisiert, da sich die JAR-Spezifikationsmethode geändert hat Weitere Informationen finden Sie unter Offiziell.

jar {
    baseName = 'example'
    version = '1.0.0-SNAPSHOT'
}

Was oben war, wurde geändert

bootJar {
    archiveBaseName = "example"
    archiveVersion = "1.0.0-SNAPSHOT"
}

Ändern Sie die Version von Spiring Boot

Für die Verwendung von Java 11 ist Spring Boot 2.1.x oder höher erforderlich Da es eine gute Idee ist, werde ich versuchen, es auf die neueste Version 2.2.2 zu bringen Befolgen Sie grundsätzlich das Offizielle Migrationshandbuch.

buildscript {
    ext {
        springBootVersion = '1.5.13.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

Spring Boot wendet das Abhängigkeitsverwaltungs-Plug-In nicht mehr automatisch an. Fügen Sie daher auch das Plug-In hinzu

apply plugin: 'io.spring.dependency-management'

Da sich die Methode zur Angabe der Hauptklasse geändert hat, hat sich auch dies geändert

springBoot {
    mainClassName = "jp.co.example.Application"
}

Aktualisieren Sie die Bibliotheksversion

Aktualisieren Sie die Bibliotheksversion, während Sie MavenRepository anzeigen.

Bibliothek rund um Spring Boot

Es ist einfacher, die Version der Bibliothek um Spring Boot mit einer Variablen anzugeben Beachten Sie jedoch, dass einige Versionen von der Spring Boot-Version abweichen können.

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:${springBootVersion}")
    compile("org.springframework.boot:spring-boot-starter-jdbc:${springBootVersion}")
    compile("org.springframework.boot:spring-boot-starter-security:${springBootVersion}")
    compile("org.springframework.boot:spring-boot-starter-actuator:${springBootVersion}")

    testCompile("org.springframework.boot:spring-boot-starter-test:${springBootVersion}")
    testCompile("org.springframework.security:spring-security-test:5.2.1.RELEASE")
}

lombok

Da sich die Methode zum Angeben der Abhängigkeit geändert hat und Sie normalerweise nur die Version und das Update angeben, tritt ein Fehler auf, wenn die von lombok zur Erstellungszeit automatisch generierte Methode nicht gefunden wird Lesen Sie Offiziell und fügen Sie die folgenden Spezifikationen hinzu

compileOnly('org.projectlombok:lombok:1.18.10')
annotationProcessor('org.projectlombok:lombok:1.18.10')

Außerdem wird bei Verwendung von @Value die Fehlermeldung angezeigt, dass die Deserialisierung in Jackson nicht gut funktioniert. Dies kann vermieden werden, indem eine Datei mit dem Namen lombok.config direkt unter dem Projekt erstellt und Folgendes beschrieben wird. Weitere Einstellungen sind im Offiziellen Migrationshandbuch beschrieben.

lombok.addJavaxGeneratedAnnotation = false
lombok.addLombokGeneratedAnnotation = true
lombok.noArgsConstructor.extraPrivate = false
lombok.anyConstructor.addConstructorProperties = true

config.stopBubbling = true

jjwt

Weil es bei Verwendung einiger Algorithmen auf veralteten Java 11-APIs basiert Wenn Sie Java 8 verwenden und auf Java 11 migriert sind, müssen Sie eine Abhängigkeit hinzufügen Fügen Sie Folgendes hinzu, indem Sie auf Offiziell verweisen.

compile('javax.xml.bind:jaxb-api:2.3.0')
compile('com.sun.xml.bind:jaxb-core:2.3.0')
compile('com.sun.xml.bind:jaxb-impl:2.3.0')

Andere

Update auf gut Vergessen Sie nicht, die in anderen als den Abhängigkeiten angegebenen Bibliotheken zu aktualisieren. Ich habe vergessen, jacoco zu aktualisieren und meine Zeit verschwendet

Unterstützt APIs, die in Java 11 veraltet sind

Dieser Artikel wird als Referenz zur Korrektur der veralteten API verwendet.

Korrigieren Sie veraltete Klassen in SpringBoot 2.0

Wenn ich versuche, es zu erstellen, gibt es mehrere veraltete Klassen um Spring Boot, also werde ich es beheben Siehe Offizielles Migrationshandbuch

Dieses Mal wurden nur die Klassen um org.springframework.boot.autoconfigure.web, die die Fehlermeldung kontrollierten, als Ziel ausgewählt. Die folgende Methode

@RequestMapping(value = "/error")
public ErrorResponse error(HttpServletRequest request, HttpServletResponse response) {
  ServletRequestAttributes attributes = new ServletRequestAttributes(request);
  Throwable error = errorAttributes.getError(attributes);
  return convertException(error);
}

mach das

@RequestMapping(value = "/error")
public ErrorResponse error(WebRequest request) {
  Throwable error = errorAttributes.getError(request);
  return convertException(error);
}

Versuche zu testen

Wenn Sie dies bisher getan haben, wird der Build vorerst bestanden. Führen Sie den Test durch und prüfen Sie, ob eine Entfettung aufgetreten ist Diesmal scheint es kein besonderes Problem zu geben Wir werden die Auflösung von Warn verschieben und versuchen, die JDK11-kompatible Anwendung vorerst für Docker bereitzustellen.

Ändern Sie die Docker-Datei

Dockerfile muss nur das Basis-Image ändern Dieser Artikel hilft Ihnen bei der Entscheidung, welches Bild Sie auswählen möchten. Wie diesmal empfohlen, wählen Sie adoptopenjdk / openjdk11: alpine-slim

FROM adoptopenjdk/openjdk11:alpine-slim

Andere

Ändern Sie die CircleCI-Einstellungen

Wenn Sie das CI / CD-Tool verwenden, müssen Sie auch diese Einstellung ändern. Es ist leicht zu vergessen, das Basis-Image beim Erstellen der Testumgebung anzugeben.

SpringBootActuator

Bitte beachten Sie, dass das Präfix / actuator allen Endpunkten hinzugefügt wurde, die automatisch von SpringBootActuator generiert werden. Die Bereitstellung funktioniert nicht, insbesondere bei Verwendung von / health Weitere Änderungen finden Sie unter Dieser Artikel.

schließlich

Mit den oben genannten Änderungen sollten Sie vorerst bereit sein, sie bereitzustellen. Wenn ein Problem auftritt, werde ich es entsprechend hinzufügen Bitte lassen Sie mich wissen, wenn es so etwas wie "Diese Schreibweise ist korrekt" oder "Dies kann Fehler verursachen" gibt.

Referenz

Installieren Sie AdoptOpenJDK11 mit Homebrew auf dem Mac

Hinweise zum Aktualisieren der Version des Gradle-Wrappers

Memorandum bei Spring Boot 1.5.10 → Spring Boot 2.0.0

Spring Boot 2.0 Migration Guide

Lombok Project

Denken Sie an empfohlene Docker-Images nach der Veröffentlichung von Java 11

Spring Boot 2.0 Actuator, 3 Änderungen, die Sie kennen sollten, damit es funktioniert

Welche Java-Ingenieure sollten sich auf die Java 11-Version vorbereiten

ObjectMapper can't deserialize without default constructor after upgrade to Spring Boot 2

Lombok Changelog

Recommended Posts

Machen Sie die SpringBoot1.5 + Gradle4.4 + Java8 + Docker-Umgebung mit Java11 kompatibel
Bereiten Sie eine Scraping-Umgebung mit Docker und Java vor
So erstellen Sie eine Docker-Umgebung mit Gradle for IntelliJ
Machen Sie mit JavaFX erstellte Kalender-Gadgets mit Java SE 9 kompatibel
[Hinweis] Erstellen Sie mit Docker eine Java-Umgebung von Grund auf neu
Erstellen Sie mit Gradle ein Java-Multiprojekt
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
Erstellen einer Docker-Umgebung mit WSL
Verwenden von Docker von Java Gradle
Hallo Welt mit SpringBoot / Gradle
Lassen Sie uns schreiben, wie API mit SpringBoot + Docker von 0 erstellt wird
Erstellen Sie mit Docker eine Umgebung für Rails5 und postgresql, damit auch pgadmin verwendet werden kann
Erstellen Sie mit Docker eine Vue3-Umgebung!
Erstellen Sie mit Docker eine lokale Couchbase-Umgebung
Erstellen eines Java-Projekts mit Gradle
Installieren Sie Java mit Ubuntu 16.04 Docker
Erstellen Sie mit Docker eine Node.js-Umgebung
Umgebungsbau mit Docker für Anfänger
Bereiten Sie die Java-Entwicklungsumgebung mit Atom vor
Verwandeln Sie Java-Anwendungen mit Jib ganz einfach in Docker
Erstellen Sie mit Docker eine SolrCloud-Überprüfungsumgebung
[Umgebungskonstruktion mit Docker] Rails 6 & MySQL 8
Lassen Sie Jupyter Lab überall mit Docker arbeiten
[Java & SpringBoot] Umgebungskonstruktion für Mac
Erstellen Sie mit Laradock eine Docker + Laravel-Umgebung
Wechseln Sie die Umgebung mit dem Boot-Argument in SpringBoot
Bereiten Sie die Java-Entwicklungsumgebung mit VS Code vor
[Java] Erstellen Sie mit Gradle ein ausführbares Modul
Aufbau einer GPU-Umgebung mit Docker [Version Oktober 2020]
Schienenumgebungskonstruktion mit Docker (persönliche Apokalypse)
Erstellen einer Rails 6- und PostgreSQL-Umgebung mit Docker
Aufbau einer Laravel-Entwicklungsumgebung mit Docker (Mac)
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
Machen Sie so etwas wie Javas Enum mit Typescript
Erreichen Sie eine OpenSSL-kompatible Verschlüsselung mit Java / PHP
Bearbeiten Sie MySQL mit Befehlen in der Docker-Umgebung
CICS-Java-Anwendung ausführen- (3) Build-Management mit Gradle
Erstellen einer Entwicklungsumgebung für Java-Webanwendungen mit Docker für Mac Teil1
Erstellen Sie mit Docker eine Spring Boot-gradle-mysql-Entwicklungsumgebung
[Java] Verbindung mit lokaler Datenbank (IntelliJ + SpringBoot)
[Docker] Erstellen Sie mit Docker eine Node.js + Express + Webpack-Umgebung
Aufbau der Spring Boot + Docker Java-Entwicklungsumgebung
[Docker] [Nginx] Erstellen Sie mit Nginx eine einfache ALB
Erstellen einer Umgebung für Laravel + MySQL + phpMyadmin mit Docker
Erstellen Sie mit Docker eine Wordpress-Entwicklungsumgebung
[Docker] Erstellen Sie die Ausführungsumgebung von Jupyter Lab mit Docker
Einführung eines automatisierten Java-Tests mit JUnit 5 + Gradle