Skip to content

Commit 1ce6e79

Browse files
committed
Polish "Allow the project to be built with Java 16"
See gh-25171
1 parent 1ccd8da commit 1ce6e79

File tree

4 files changed

+43
-86
lines changed

4 files changed

+43
-86
lines changed

buildSrc/src/main/java/org/springframework/boot/build/toolchain/ToolchainExtension.java

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@
1616

1717
package org.springframework.boot.build.toolchain;
1818

19-
import java.util.Optional;
20-
2119
import org.gradle.api.Project;
20+
import org.gradle.api.provider.Property;
2221
import org.gradle.jvm.toolchain.JavaLanguageVersion;
2322

2423
/**
@@ -28,41 +27,22 @@
2827
*/
2928
public class ToolchainExtension {
3029

31-
private final Project project;
30+
private final Property<JavaLanguageVersion> maximumCompatibleJavaVersion;
3231

33-
private int maximumCompatibleJavaVersion;
32+
private final JavaLanguageVersion javaVersion;
3433

3534
public ToolchainExtension(Project project) {
36-
this.project = project;
37-
}
38-
39-
public void setMaximumCompatibleJavaVersion(int maximumVersion) {
40-
this.maximumCompatibleJavaVersion = maximumVersion;
41-
}
42-
43-
public Optional<JavaLanguageVersion> getToolchainVersion() {
44-
String toolchainVersion = (String) this.project.findProperty("toolchainVersion");
45-
if (toolchainVersion == null) {
46-
return Optional.empty();
47-
}
48-
int version = Integer.parseInt(toolchainVersion);
49-
return getJavaLanguageVersion(version);
35+
this.maximumCompatibleJavaVersion = project.getObjects().property(JavaLanguageVersion.class);
36+
String toolchainVersion = (String) project.findProperty("toolchainVersion");
37+
this.javaVersion = (toolchainVersion != null) ? JavaLanguageVersion.of(toolchainVersion) : null;
5038
}
5139

52-
public boolean isJavaVersionSupported() {
53-
Optional<JavaLanguageVersion> maximumVersion = getJavaLanguageVersion(this.maximumCompatibleJavaVersion);
54-
if (!maximumVersion.isPresent()) {
55-
return true;
56-
}
57-
Optional<JavaLanguageVersion> toolchainVersion = getToolchainVersion();
58-
return toolchainVersion.isPresent() && maximumVersion.get().canCompileOrRun(toolchainVersion.get());
40+
public Property<JavaLanguageVersion> getMaximumCompatibleJavaVersion() {
41+
return this.maximumCompatibleJavaVersion;
5942
}
6043

61-
private Optional<JavaLanguageVersion> getJavaLanguageVersion(int version) {
62-
if (version >= 8) {
63-
return Optional.of(JavaLanguageVersion.of(version));
64-
}
65-
return Optional.empty();
44+
JavaLanguageVersion getJavaVersion() {
45+
return this.javaVersion;
6646
}
6747

6848
}

buildSrc/src/main/java/org/springframework/boot/build/toolchain/ToolchainPlugin.java

Lines changed: 31 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,14 @@
1818

1919
import java.util.Arrays;
2020
import java.util.List;
21-
import java.util.Optional;
2221

23-
import org.gradle.api.Action;
2422
import org.gradle.api.Plugin;
2523
import org.gradle.api.Project;
24+
import org.gradle.api.plugins.JavaPluginExtension;
2625
import org.gradle.api.tasks.compile.JavaCompile;
2726
import org.gradle.api.tasks.javadoc.Javadoc;
2827
import org.gradle.api.tasks.testing.Test;
2928
import org.gradle.jvm.toolchain.JavaLanguageVersion;
30-
import org.gradle.jvm.toolchain.JavaToolchainService;
3129
import org.gradle.jvm.toolchain.JavaToolchainSpec;
3230

3331
/**
@@ -44,19 +42,28 @@ public void apply(Project project) {
4442

4543
private void configureToolchain(Project project) {
4644
ToolchainExtension toolchain = project.getExtensions().create("toolchain", ToolchainExtension.class, project);
47-
project.afterEvaluate((evaluated) -> {
48-
Optional<JavaLanguageVersion> toolchainVersion = toolchain.getToolchainVersion();
49-
if (toolchainVersion.isPresent()) {
50-
if (!toolchain.isJavaVersionSupported()) {
51-
disableToolchainTasks(project);
52-
}
53-
else {
54-
configureJavaCompileToolchain(project, toolchain);
55-
configureJavadocToolchain(project, toolchain);
56-
configureTestToolchain(project, toolchain);
57-
}
58-
}
59-
});
45+
JavaLanguageVersion toolchainVersion = toolchain.getJavaVersion();
46+
if (toolchainVersion != null) {
47+
project.afterEvaluate((evaluated) -> configure(evaluated, toolchain));
48+
}
49+
}
50+
51+
private void configure(Project project, ToolchainExtension toolchain) {
52+
if (!isJavaVersionSupported(toolchain, toolchain.getJavaVersion())) {
53+
disableToolchainTasks(project);
54+
}
55+
else {
56+
JavaToolchainSpec toolchainSpec = project.getExtensions().getByType(JavaPluginExtension.class)
57+
.getToolchain();
58+
toolchainSpec.getLanguageVersion().set(toolchain.getJavaVersion());
59+
configureJavaCompileToolchain(project, toolchain);
60+
configureTestToolchain(project, toolchain);
61+
}
62+
}
63+
64+
public boolean isJavaVersionSupported(ToolchainExtension toolchain, JavaLanguageVersion toolchainVersion) {
65+
return toolchain.getMaximumCompatibleJavaVersion().map((version) -> version.canCompileOrRun(toolchainVersion))
66+
.getOrElse(true);
6067
}
6168

6269
private void disableToolchainTasks(Project project) {
@@ -67,50 +74,20 @@ private void disableToolchainTasks(Project project) {
6774

6875
private void configureJavaCompileToolchain(Project project, ToolchainExtension toolchain) {
6976
project.getTasks().withType(JavaCompile.class, (compile) -> {
70-
withOptionalJavaToolchain(toolchain).ifPresent((action) -> {
71-
JavaToolchainService service = getJavaToolchainService(project);
72-
compile.getJavaCompiler().set(service.compilerFor(action));
73-
compile.getOptions().setFork(true);
74-
// See https://github.com/gradle/gradle/issues/15538
75-
List<String> forkArgs = Arrays.asList("--add-opens",
76-
"jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED");
77-
compile.getOptions().getForkOptions().getJvmArgs().addAll(forkArgs);
78-
});
79-
});
80-
}
81-
82-
private void configureJavadocToolchain(Project project, ToolchainExtension toolchain) {
83-
project.getTasks().withType(Javadoc.class, (javadoc) -> {
84-
withOptionalJavaToolchain(toolchain).ifPresent((action) -> {
85-
JavaToolchainService service = getJavaToolchainService(project);
86-
javadoc.getJavadocTool().set(service.javadocToolFor(action));
87-
});
77+
compile.getOptions().setFork(true);
78+
// See https://github.com/gradle/gradle/issues/15538
79+
List<String> forkArgs = Arrays.asList("--add-opens", "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED");
80+
compile.getOptions().getForkOptions().getJvmArgs().addAll(forkArgs);
8881
});
8982
}
9083

9184
private void configureTestToolchain(Project project, ToolchainExtension toolchain) {
9285
project.getTasks().withType(Test.class, (test) -> {
93-
withOptionalJavaToolchain(toolchain).ifPresent((action) -> {
94-
JavaToolchainService service = getJavaToolchainService(project);
95-
test.getJavaLauncher().set(service.launcherFor(action));
96-
// See https://github.com/spring-projects/spring-ldap/issues/570
97-
List<String> arguments = Arrays.asList("--add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED",
98-
"--illegal-access=warn");
99-
test.jvmArgs(arguments);
100-
});
86+
// See https://github.com/spring-projects/spring-ldap/issues/570
87+
List<String> arguments = Arrays.asList("--add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED",
88+
"--illegal-access=warn");
89+
test.jvmArgs(arguments);
10190
});
10291
}
10392

104-
private JavaToolchainService getJavaToolchainService(Project project) {
105-
return project.getExtensions().getByType(JavaToolchainService.class);
106-
}
107-
108-
private Optional<Action<JavaToolchainSpec>> withOptionalJavaToolchain(ToolchainExtension toolchain) {
109-
return toolchain.getToolchainVersion().map((toolchainVersion) -> {
110-
Action<JavaToolchainSpec> action = (javaToolchainSpec) -> javaToolchainSpec.getLanguageVersion()
111-
.convention(toolchainVersion);
112-
return Optional.of(action);
113-
}).orElse(Optional.empty());
114-
}
115-
11693
}

spring-boot-project/spring-boot-cli/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
description = "Spring Boot CLI"
99

1010
toolchain {
11-
maximumCompatibleJavaVersion = 15
11+
maximumCompatibleJavaVersion = JavaLanguageVersion.of(15)
1212
}
1313

1414
configurations {

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ plugins {
1111
description = "Spring Boot Gradle Plugin"
1212

1313
toolchain {
14-
maximumCompatibleJavaVersion = 15
14+
maximumCompatibleJavaVersion = JavaLanguageVersion.of(15)
1515
}
1616

1717
configurations {

0 commit comments

Comments
 (0)