From 9352e56358b334f532230b8a710be75fabd2aaf7 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Mon, 20 Sep 2021 13:04:49 +0200 Subject: [PATCH] #1639 - Prepare 2.0 development. Upgrade to Java 17 and Spring Framework 6. Switch to JakartaEE 9 version of the Servlet API. Drop support for Joda Time. Configure Kotlin plugin to target JDK 1.8 as it doesn't support 17, yet. --- Jenkinsfile | 115 ++---------------- ci/Dockerfile | 4 +- pom.xml | 31 ++--- .../hateoas/AffordancesSample.java | 2 - .../server/mvc/WebMvcLinkBuilderFactory.java | 4 +- .../springframework/hateoas/TestUtils.java | 6 +- .../mvc/WebMvcLinkBuilderFactoryUnitTest.java | 10 +- 7 files changed, 36 insertions(+), 136 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index e01bee9f..2e7ddceb 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,7 +2,7 @@ pipeline { agent none triggers { - pollSCM 'H/10 * * * *' + pollSCM 'H/3 * * * *' } options { @@ -11,7 +11,7 @@ pipeline { } stages { - stage('Publish OpenJDK 8 + Graphviz + jq docker image') { + stage('Publish OpenJDK 17 + Graphviz + jq docker image') { when { changeset "ci/Dockerfile" } @@ -19,7 +19,7 @@ pipeline { steps { script { - def image = docker.build("springci/spring-hateoas-openjdk8-with-graphviz-and-jq", "ci/") + def image = docker.build("springci/spring-hateoas-openjdk17-with-graphviz-and-jq", "ci/") docker.withRegistry('', 'hub.docker.com-springbuildmaster') { image.push() } @@ -27,10 +27,10 @@ pipeline { } } - stage("test: baseline (jdk8)") { + stage("test: baseline (JDK 17)") { agent { docker { - image 'adoptopenjdk/openjdk8:latest' + image 'openjdk:17' args '-v $HOME/.m2:/tmp/jenkins-home/.m2' } } @@ -40,111 +40,10 @@ pipeline { } } - stage("Test other configurations") { - parallel { - stage("test: baseline (jdk11)") { - agent { - docker { - image 'adoptopenjdk/openjdk11:latest' - args '-v $HOME/.m2:/tmp/jenkins-home/.m2' - } - } - options { timeout(time: 30, unit: 'MINUTES') } - steps { - sh 'PROFILE=none ci/test.sh' - } - } - stage("test: baseline (jdk17)") { - agent { - docker { - image 'openjdk:17' - args '-v $HOME/.m2:/tmp/jenkins-home/.m2' - } - } - options { timeout(time: 30, unit: 'MINUTES') } - steps { - sh 'PROFILE=none ci/test.sh' - } - } - stage("test: spring-next (jdk8)") { - agent { - docker { - image 'adoptopenjdk/openjdk8:latest' - args '-v $HOME/.m2:/tmp/jenkins-home/.m2' - } - } - options { timeout(time: 30, unit: 'MINUTES') } - steps { - sh 'PROFILE=spring-next ci/test.sh' - } - } - stage("test: spring-next (jdk11)") { - agent { - docker { - image 'adoptopenjdk/openjdk11:latest' - args '-v $HOME/.m2:/tmp/jenkins-home/.m2' - } - } - options { timeout(time: 30, unit: 'MINUTES') } - steps { - sh 'PROFILE=spring-next ci/test.sh' - } - } - stage("test: spring-next (jdk17)") { - agent { - docker { - image 'openjdk:17' - args '-v $HOME/.m2:/tmp/jenkins-home/.m2' - } - } - options { timeout(time: 30, unit: 'MINUTES') } - steps { - sh 'PROFILE=spring-next ci/test.sh' - } - } - stage("test: kotlin-next (jdk8)") { - agent { - docker { - image 'adoptopenjdk/openjdk8:latest' - args '-v $HOME/.m2:/tmp/jenkins-home/.m2' - } - } - options { timeout(time: 30, unit: 'MINUTES') } - steps { - sh 'PROFILE=kotlin-next ci/test.sh' - } - } - stage("test: kotlin-next (jdk11)") { - agent { - docker { - image 'adoptopenjdk/openjdk11:latest' - args '-v $HOME/.m2:/tmp/jenkins-home/.m2' - } - } - options { timeout(time: 30, unit: 'MINUTES') } - steps { - sh 'PROFILE=kotlin-next ci/test.sh' - } - } - stage("test: kotlin-next (jdk17)") { - agent { - docker { - image 'openjdk:17' - args '-v $HOME/.m2:/tmp/jenkins-home/.m2' - } - } - options { timeout(time: 30, unit: 'MINUTES') } - steps { - sh 'PROFILE=kotlin-next ci/test.sh' - } - } - } - } - stage('Deploy') { agent { docker { - image 'springci/spring-hateoas-openjdk8-with-graphviz-and-jq:latest' + image 'springci/spring-hateoas-openjdk17-with-graphviz-and-jq:latest' args '-v $HOME/.m2:/tmp/jenkins-home/.m2' } } @@ -196,7 +95,7 @@ pipeline { } agent { docker { - image 'springci/spring-hateoas-openjdk8-with-graphviz-and-jq:latest' + image 'springci/spring-hateoas-openjdk17-with-graphviz-and-jq:latest' args '-v $HOME/.m2:/tmp/jenkins-home/.m2' } } diff --git a/ci/Dockerfile b/ci/Dockerfile index ccffe63b..d91fe0e3 100644 --- a/ci/Dockerfile +++ b/ci/Dockerfile @@ -1,4 +1,6 @@ -FROM adoptopenjdk/openjdk8:latest +FROM openjdk:17-bullseye + +RUN sed -i -e 's/http/https/g' /etc/apt/sources.list RUN apt-get update && apt-get install -y graphviz jq gpg diff --git a/pom.xml b/pom.xml index 1b355f8f..eb59aa64 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.hateoas spring-hateoas - 1.5.0-SNAPSHOT + 2.0.0-SNAPSHOT Spring HATEOAS https://github.com/spring-projects/spring-hateoas @@ -69,7 +69,7 @@ UTF-8 - 1.8 + 17 3.21.0 0.2.5 1.3 @@ -83,7 +83,7 @@ 1.18.22 2020.0.15 1.7.32 - 5.3.15 + 6.0.0-SNAPSHOT 2.0.0.RELEASE 1.6.10 1.6.0 @@ -981,16 +981,9 @@ - joda-time - joda-time - 2.10.10 - test - - - - javax.servlet - javax.servlet-api - 4.0.1 + jakarta.servlet + jakarta.servlet-api + 5.0.0 provided @@ -1058,7 +1051,7 @@ none https://docs.spring.io/spring/docs/${spring.version}/javadoc-api/ - https://docs.oracle.com/javase/8/docs/api/ + https://docs.oracle.com/en/java/javase/17/docs/api/ @@ -1160,12 +1153,13 @@ false + org.jetbrains.kotlin kotlin-maven-plugin ${kotlin.version} - ${source.level} + 1.8 @@ -1212,6 +1206,13 @@ false + + spring-snapshot + https://repo.spring.io/snapshot + + false + + diff --git a/src/docs/java/org/springframework/hateoas/AffordancesSample.java b/src/docs/java/org/springframework/hateoas/AffordancesSample.java index a5294e75..91cf6fe6 100644 --- a/src/docs/java/org/springframework/hateoas/AffordancesSample.java +++ b/src/docs/java/org/springframework/hateoas/AffordancesSample.java @@ -17,8 +17,6 @@ package org.springframework.hateoas; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; -import lombok.var; - import org.springframework.hateoas.SimpleRepresentationModelAssemblerTest.Employee; import org.springframework.hateoas.mediatype.Affordances; import org.springframework.http.HttpMethod; diff --git a/src/main/java/org/springframework/hateoas/server/mvc/WebMvcLinkBuilderFactory.java b/src/main/java/org/springframework/hateoas/server/mvc/WebMvcLinkBuilderFactory.java index 2f4d365f..91d88e67 100644 --- a/src/main/java/org/springframework/hateoas/server/mvc/WebMvcLinkBuilderFactory.java +++ b/src/main/java/org/springframework/hateoas/server/mvc/WebMvcLinkBuilderFactory.java @@ -15,6 +15,8 @@ */ package org.springframework.hateoas.server.mvc; +import jakarta.servlet.ServletContext; + import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; @@ -25,8 +27,6 @@ import java.util.Map; import java.util.function.Function; import java.util.function.Supplier; -import javax.servlet.ServletContext; - import org.springframework.core.MethodParameter; import org.springframework.core.convert.ConversionService; import org.springframework.format.support.DefaultFormattingConversionService; diff --git a/src/test/java/org/springframework/hateoas/TestUtils.java b/src/test/java/org/springframework/hateoas/TestUtils.java index fab28580..13648122 100644 --- a/src/test/java/org/springframework/hateoas/TestUtils.java +++ b/src/test/java/org/springframework/hateoas/TestUtils.java @@ -17,10 +17,10 @@ package org.springframework.hateoas; import static org.assertj.core.api.Assertions.*; -import java.io.IOException; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; +import java.io.IOException; import org.junit.jupiter.api.BeforeEach; import org.springframework.mock.web.MockFilterChain; diff --git a/src/test/java/org/springframework/hateoas/server/mvc/WebMvcLinkBuilderFactoryUnitTest.java b/src/test/java/org/springframework/hateoas/server/mvc/WebMvcLinkBuilderFactoryUnitTest.java index 0b1dc899..ec9eebd4 100644 --- a/src/test/java/org/springframework/hateoas/server/mvc/WebMvcLinkBuilderFactoryUnitTest.java +++ b/src/test/java/org/springframework/hateoas/server/mvc/WebMvcLinkBuilderFactoryUnitTest.java @@ -18,13 +18,13 @@ package org.springframework.hateoas.server.mvc; import static org.assertj.core.api.Assertions.*; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; -import org.joda.time.DateTime; -import org.joda.time.format.ISODateTimeFormat; import org.junit.jupiter.api.Test; import org.springframework.core.MethodParameter; import org.springframework.format.annotation.DateTimeFormat; @@ -96,11 +96,11 @@ class WebMvcLinkBuilderFactoryUnitTest extends TestUtils { @Test void usesDateTimeFormatForUriBinding() { - DateTime now = DateTime.now(); + LocalDateTime now = LocalDateTime.now(); WebMvcLinkBuilderFactory factory = new WebMvcLinkBuilderFactory(); Link link = factory.linkTo(methodOn(SampleController.class).sampleMethod(now)).withSelfRel(); - assertThat(link.getHref()).endsWith("/sample/" + ISODateTimeFormat.date().print(now)); + assertThat(link.getHref()).endsWith("/sample/" + now.format(DateTimeFormatter.ISO_DATE)); } /** @@ -190,7 +190,7 @@ class WebMvcLinkBuilderFactoryUnitTest extends TestUtils { HttpEntity sampleMethod(@PathVariable("id") Long id, SpecialType parameter); @RequestMapping("/sample/{time}") - HttpEntity sampleMethod(@PathVariable("time") @DateTimeFormat(iso = ISO.DATE) DateTime time); + HttpEntity sampleMethod(@PathVariable("time") @DateTimeFormat(iso = ISO.DATE) LocalDateTime time); @RequestMapping("/sample/mapsupport") HttpEntity sampleMethodWithMap(@RequestParam Map queryParams);