Hi,

this PR tackles #21604 as discussed. Fortunately, even the automatic JDK upgrade should already work.

Before merging this, #21605 needs to be merged. Apart from that I haven't seen any test failures when I run with the custom buildJavaHome property being set to my local JDK 15 installation.

Cheers, Christoph

Comment From: snicoll

Thanks for the PR @dreis2211

Apart from that I haven't seen any test failures when I run with the custom buildJavaHome property being set to my local JDK 15 installation.

This was required when Gradle does not support the target JDK which does not seem to be case with Java15 at this point. I don't see this PR using that feature either so I am a bit confused.

Switching my local JDK to Java 15ea and building master leads to some failures. Do you have time to look at those?

Comment From: dreis2211

@snicoll You're absolutely right. I was under the impression that I'm getting the same results with the custom home property being set. Let me try with your approach.

Comment From: dreis2211

@snicoll It would have also worked with the custom java home being set, but my tasks were cached and thus not all executed.

I see one additional failure in SampleAntApplicationIT.runJar + the already mentioned multi-release JAR test that is covered by #21605 .

Does that match your local build?

Comment From: snicoll

No, it does not. I have a compilation failure:

> Task :spring-boot-project:spring-boot-tools:spring-boot-loader:compileJava FAILED
/Users/snicoll/workspace/work/spring-boot/master/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/StringSequence.java:75: error: isEmpty() in StringSequence cannot implement isEmpty() in CharSequence
        boolean isEmpty() {

and one test failure before I gave up:

MappingsEndpointReactiveDocumentationTests > mappings() FAILED
    org.springframework.restdocs.payload.FieldTypesDoNotMatchException at MappingsEndpointReactiveDocumentationTests.java:126

This in a branch of your first PR I am about to merge. Maybe something is cached and shouldn't be?

$ java -version
openjdk version "15-ea" 2020-09-15
OpenJDK Runtime Environment (build 15-ea+26-1287)
OpenJDK 64-Bit Server VM (build 15-ea+26-1287, mixed mode, sharing)

Comment From: dreis2211

openjdk version "15-ea" 2020-09-15
OpenJDK Runtime Environment (build 15-ea+17-717)
OpenJDK 64-Bit Server VM (build 15-ea+17-717, mixed mode, sharing)

I guess the first one can be explained by CharSequence.isEmpty being only available in later builds. I'll try the latest JDK 15 build then.

Comment From: dreis2211

I've pushed two additional commits that fix the syntax error and the failure in MappingsEndpointReactiveDocumentationTests

Comment From: dreis2211

I see some intermittent failures for tests that all seem to be related to timing. I wonder if https://bugs.openjdk.java.net/browse/JDK-8242504 is related as this got introduced recently as well. EDIT: After checking the code, I don't think it is related as it should not affect my Mac.

Comment From: dreis2211

I've also seen some flaky tests that are annotated with @WebEndpointTest that prematurely close the connection.

Comment From: dreis2211

I just tried with JDK 14 and see similar flaky failures there as well. Particularly, the "performance" tests ConfigurationPropertySourcesTests seem to fail on JDK 14 on my machine, too. So I wonder if we might already be in the position to consider JDK 15 as done and "simply" have to improve flaky tests across the board.

Comment From: dreis2211

DevToolsIntegrationTests > createAControllerAndThenAddARequestMapping seems to also fail on JDK 8 occasionally already.

Comment From: dreis2211

Trying with 15-ea-27 introduced a change for missing Javadocs: https://bugs.openjdk.java.net/browse/JDK-8242607

That produces quite a lot of warnings like the following:

/Users/christoph.dreis/projects/spring-boot/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/docker/transport/DockerEngineException.java:35: warning: no comment
        private final String reasonPhrase;

It's not breaking the builds, so I guess it's fine for this PR, but probably needs to be tackled in another one.

Comment From: snicoll

Ah ah. I was building locally and I've already polished that checkstyle issue here Christoph.

Comment From: dreis2211

Sorry - I've noticed this one just now. :/