Cet article est l'article du 15ème jour du Java Advent Calendar 2019.
Je l'ai laissé environ un an après l'expiration du support gratuit de Java 8 en janvier 2019, Depuis que j'ai le temps cette fois, j'ai mis à jour vers Java 11, qui est le premier LTS depuis 8. C'est un mémo à l'époque
J'ai essayé de commencer à écrire, mais il semble qu'OpenJDK 8 sera pris en charge jusqu'en juin 2023, donc J'aurais dû passer d'Oracle JDK à Open JDK ... Mais je l'ai fait alors je l'enregistrerai
Entrez la commande suivante pour installer le dernier JDK
brew cask install adoptopenjdk
Cependant, à l'heure actuelle, JDK13 est inclus, il est donc nécessaire de spécifier la version pour inclure la version LTS de JDK11. Rechercher la version publiée
$ 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
Puisque je veux installer JDK11 cette fois, spécifiez la version avec la commande suivante et installez
brew cask install adoptopenjdk11
Changer le PATH existant en JDK11
export JAVA_HOME=`/usr/libexec/java_home -v 11`
Vérifier la version
$ 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)
Ouvrez la structure de projet avec Command + et spécifiez JDK 11 pour Project SDK et Project Language Lebel.
Gradle 4.4 ne prend pas en charge le JDK 11, il doit donc être mis à jour Il semble que les versions 5.0 et ultérieures soient prises en charge, mais comme c'est une bonne idée, je vais essayer d'en faire la dernière version 6.0.1 actuelle
La mise à jour de la version répertoriée dans gradle / wrapper / gradle-wrapper.properties modifiera la version de Gradle appliquée à votre projet. Cette fois, changez simplement la partie 4.4 suivante en 6.0.1.
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-bin.zip
Cela seul ne propagera pas les changements à gradlew, donc régénérez gradlew
./gradlew wrapper
Remplacez diverses bibliothèques de framework par celles compatibles avec JDK11 Fondamentalement, tout est décrit dans gradle.build, vous pouvez donc le modifier
La signification de chaque spécification est décrite dans Officiel, alors spécifiez ce dont vous avez besoin.
sourceCompatibility = 11
targetCompatibility = 11
Mis à jour car la méthode de spécification du pot a changé Voir Officiel pour plus de détails.
jar {
baseName = 'example'
version = '1.0.0-SNAPSHOT'
}
Changé ce qui était ci-dessus en dessous
bootJar {
archiveBaseName = "example"
archiveVersion = "1.0.0-SNAPSHOT"
}
Spring Boot 2.1.x ou supérieur est requis pour utiliser Java 11 Comme c'est une bonne idée, je vais essayer d'en faire la dernière version 2.2.2 En gros, suivez le Guide officiel de migration.
buildscript {
ext {
springBootVersion = '1.5.13.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
Spring Boot n'applique plus automatiquement le plug-in de gestion des dépendances, alors ajoutez également le plug-in
apply plugin: 'io.spring.dependency-management'
Depuis que la méthode de spécification de la classe principale a changé, cela a également changé
springBoot {
mainClassName = "jp.co.example.Application"
}
Mettez à jour la version de la bibliothèque en consultant MavenRepository
Il est plus facile de spécifier la version de la bibliothèque autour de Spring Boot avec une variable Cependant, veuillez noter que certaines versions peuvent différer de la version Spring Boot.
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
Étant donné que la méthode de spécification de la dépendance a changé, si vous ne spécifiez normalement que la version et la mise à jour, une erreur se produira si la méthode automatiquement générée par lombok au moment de la construction n'est pas trouvée Reportez-vous à Officiel et ajoutez les spécifications suivantes
compileOnly('org.projectlombok:lombok:1.18.10')
annotationProcessor('org.projectlombok:lombok:1.18.10')
De plus, lorsque j'utilise @Value, j'obtiens une erreur indiquant que la désérialisation dans Jackson ne fonctionne pas bien. Cela peut être évité en créant un fichier appelé lombok.config directement sous le projet et en décrivant ce qui suit. D'autres paramètres sont décrits dans le Guide officiel de migration.
lombok.addJavaxGeneratedAnnotation = false
lombok.addLombokGeneratedAnnotation = true
lombok.noArgsConstructor.extraPrivate = false
lombok.anyConstructor.addConstructorProperties = true
config.stopBubbling = true
jjwt
Parce qu'il repose sur des API obsolètes Java 11 lors de l'utilisation de certains algorithmes Si vous l'utilisez à partir de Java 8 et avez migré vers Java 11, vous devez ajouter une dépendance Ajoutez ce qui suit en vous référant à Officiel
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')
Mettre à jour en bon N'oubliez pas de mettre à jour les bibliothèques spécifiées dans d'autres que les dépendances. J'ai oublié de mettre à jour jacoco et j'ai perdu mon temps
Cet article sera utilisé comme référence pour corriger l'API obsolète.
Quand j'essaye de le construire, il y a plusieurs classes obsolètes autour de Spring Boot, donc je vais le réparer Reportez-vous au Guide officiel de migration
Cette fois, seules les classes autour de org.springframework.boot.autoconfigure.web qui contrôlaient le message d'erreur ont été ciblées. La méthode suivante
@RequestMapping(value = "/error")
public ErrorResponse error(HttpServletRequest request, HttpServletResponse response) {
ServletRequestAttributes attributes = new ServletRequestAttributes(request);
Throwable error = errorAttributes.getError(attributes);
return convertException(error);
}
fais ça
@RequestMapping(value = "/error")
public ErrorResponse error(WebRequest request) {
Throwable error = errorAttributes.getError(request);
return convertException(error);
}
Si vous faites jusqu'à présent, la construction passera pour le moment, alors lancez le test et vérifiez si un dégraissage s'est produit. Il ne semble pas y avoir de problème particulier cette fois Nous reporterons la résolution de Warn et viserons à déployer l'application compatible JDK11 sur Docker pour le moment.
Dockerfile n'a besoin que de changer l'image de base Cet article vous aidera à décider quelle image choisir. Comme recommandé cette fois, sélectionnez adoptopenjdk / openjdk11: alpine-slim
FROM adoptopenjdk/openjdk11:alpine-slim
Si vous utilisez l'outil CI / CD, assurez-vous de modifier également ce paramètre. Il est facile d'oublier de spécifier l'image de base lors de la construction de l'environnement de test.
SpringBootActuator
Veuillez noter que le préfixe / actuator a été ajouté à tous les points de terminaison générés automatiquement par SpringBootActuator. Le déploiement ne fonctionne pas, en particulier lors de l'utilisation de / health Pour d'autres modifications, reportez-vous à Cet article
Avec les modifications ci-dessus, vous devriez être prêt à déployer pour le moment. Si un problème survient, je l'ajouterai le cas échéant Veuillez me faire savoir s'il y a quelque chose comme "cette façon d'écrire est correcte" ou "cela peut causer des bogues".
Installez AdoptOpenJDK11 avec homebrew sur mac
Notes sur la mise à jour de la version du wrapper Gradle
Mémorandum lorsque Spring Boot 1.5.10 → Spring Boot 2.0.0
Spring Boot 2.0 Migration Guide
Pensez aux images Docker recommandées après la version Java 11
Spring Boot 2.0 Actuator, 3 changements à connaître pour le faire fonctionner
Ce que les ingénieurs Java doivent préparer pour la version Java 11
ObjectMapper can't deserialize without default constructor after upgrade to Spring Boot 2
Recommended Posts