#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.
This commit is contained in:
Oliver Drotbohm
2021-09-20 13:04:49 +02:00
parent 191996a2a8
commit 9352e56358
7 changed files with 36 additions and 136 deletions

115
Jenkinsfile vendored
View File

@@ -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'
}
}

View File

@@ -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

31
pom.xml
View File

@@ -5,7 +5,7 @@
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
<version>1.5.0-SNAPSHOT</version>
<version>2.0.0-SNAPSHOT</version>
<name>Spring HATEOAS</name>
<url>https://github.com/spring-projects/spring-hateoas</url>
@@ -69,7 +69,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<source.level>1.8</source.level>
<source.level>17</source.level>
<assertj.version>3.21.0</assertj.version>
<docs.resources.version>0.2.5</docs.resources.version>
<evo.version>1.3</evo.version>
@@ -83,7 +83,7 @@
<lombok.version>1.18.22</lombok.version>
<reactor-bom.version>2020.0.15</reactor-bom.version>
<slf4j.version>1.7.32</slf4j.version>
<spring.version>5.3.15</spring.version>
<spring.version>6.0.0-SNAPSHOT</spring.version>
<spring-plugin.version>2.0.0.RELEASE</spring-plugin.version>
<kotlin.version>1.6.10</kotlin.version>
<kotlinx-coroutines.version>1.6.0</kotlinx-coroutines.version>
@@ -981,16 +981,9 @@
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
@@ -1058,7 +1051,7 @@
<doclint>none</doclint>
<links>
<link>https://docs.spring.io/spring/docs/${spring.version}/javadoc-api/</link>
<link>https://docs.oracle.com/javase/8/docs/api/</link>
<link>https://docs.oracle.com/en/java/javase/17/docs/api/</link>
</links>
</configuration>
</plugin>
@@ -1160,12 +1153,13 @@
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<configuration>
<jvmTarget>${source.level}</jvmTarget>
<jvmTarget>1.8</jvmTarget>
</configuration>
<executions>
<execution>
@@ -1212,6 +1206,13 @@
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-snapshot</id>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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<String, String> queryParams);