Dieser Artikel ist der Artikel zum 15. Tag von Java Adventskalender 2019.
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
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)
Öffnen Sie die Projektstruktur mit Befehl + und geben Sie JDK 11 für Project SDK und Project Language Lebel an.
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
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
Das allein wird die Änderungen nicht auf Gradlew übertragen, also regenerieren Sie Gradlew
./gradlew wrapper
Ändern Sie verschiedene Framework-Bibliotheken in mit JDK11 kompatible Grundsätzlich ist alles in gradle.build beschrieben, so dass Sie es ändern können
Die Bedeutung jeder Spezifikation ist in Official beschrieben. Geben Sie also an, was Sie benötigen.
sourceCompatibility = 11
targetCompatibility = 11
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"
}
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, während Sie MavenRepository anzeigen.
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')
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
Dieser Artikel wird als Referenz zur Korrektur der veralteten API verwendet.
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);
}
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.
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
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.
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.
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
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
Recommended Posts