1818
1919import java .util .Arrays ;
2020import java .util .List ;
21- import java .util .Optional ;
2221
23- import org .gradle .api .Action ;
2422import org .gradle .api .Plugin ;
2523import org .gradle .api .Project ;
24+ import org .gradle .api .plugins .JavaPluginExtension ;
2625import org .gradle .api .tasks .compile .JavaCompile ;
2726import org .gradle .api .tasks .javadoc .Javadoc ;
2827import org .gradle .api .tasks .testing .Test ;
2928import org .gradle .jvm .toolchain .JavaLanguageVersion ;
30- import org .gradle .jvm .toolchain .JavaToolchainService ;
3129import 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}
0 commit comments