1818import org .gradle .api .plugins .JavaPluginExtension ;
1919import org .gradle .api .tasks .SourceSet ;
2020import org .gradle .api .tasks .SourceSetContainer ;
21- import org .gradle .api .tasks .compile .CompileOptions ;
2221import org .gradle .api .tasks .compile .ForkOptions ;
2322import org .gradle .api .tasks .compile .JavaCompile ;
2423import org .gradle .api .tasks .javadoc .Javadoc ;
2524import org .gradle .api .tasks .testing .Test ;
26- import org .gradle .jvm .toolchain .JavaLanguageVersion ;
2725import org .gradle .jvm .toolchain .JavaToolchainService ;
2826
2927/**
@@ -54,72 +52,65 @@ public void apply(Project project) {
5452
5553 final SourceSetContainer sourceSets = javaPluginExtension .getSourceSets ();
5654 final SourceSet mainSourceSet = sourceSets .getByName ( SourceSet .MAIN_SOURCE_SET_NAME );
57- final SourceSet testSourceSet = sourceSets .getByName ( SourceSet .TEST_SOURCE_SET_NAME );
5855
59- final JavaCompile mainCompileTask = (JavaCompile ) project .getTasks ().getByName ( mainSourceSet .getCompileJavaTaskName () );
60- final JavaCompile testCompileTask = (JavaCompile ) project .getTasks ().getByName ( testSourceSet .getCompileJavaTaskName () );
61- final Test testTask = (Test ) project .getTasks ().findByName ( testSourceSet .getName () );
62-
63- if ( !jdkVersionsConfig .isExplicitlyConfigured () ) {
64- mainCompileTask .setSourceCompatibility ( jdkVersionsConfig .getMainReleaseVersion ().toString () );
65- mainCompileTask .setTargetCompatibility ( jdkVersionsConfig .getMainReleaseVersion ().toString () );
66-
67- testCompileTask .setSourceCompatibility ( jdkVersionsConfig .getTestReleaseVersion ().toString () );
68- testCompileTask .setTargetCompatibility ( jdkVersionsConfig .getTestReleaseVersion ().toString () );
69- }
70- else {
56+ if ( jdkVersionsConfig .getMain ().isExplicit () ) {
7157 javaPluginExtension .getToolchain ().getLanguageVersion ().set ( jdkVersionsConfig .getMainCompilerVersion () );
72-
73- configureCompileTasks ( project );
74- configureTestTasks ( project );
75- configureJavadocTasks ( project , mainSourceSet );
76-
77- configureCompileTask ( mainCompileTask , jdkVersionsConfig .getMainReleaseVersion () );
78- configureCompileTask ( testCompileTask , jdkVersionsConfig .getTestReleaseVersion () );
79-
80- testCompileTask .getJavaCompiler ().set (
81- toolchainService .compilerFor ( javaToolchainSpec -> {
82- javaToolchainSpec .getLanguageVersion ().set ( jdkVersionsConfig .getTestCompilerVersion () );
83- } )
84- );
85- if ( testTask != null ) {
86- testTask .getJavaLauncher ().set (
87- toolchainService .launcherFor ( javaToolchainSpec -> {
88- javaToolchainSpec .getLanguageVersion ().set ( jdkVersionsConfig .getTestLauncherVersion () );
89- } )
90- );
91- }
9258 }
93- }
9459
95- private void configureCompileTask ( JavaCompile compileTask , JavaLanguageVersion releaseVersion ) {
96- final CompileOptions compileTaskOptions = compileTask . getOptions ( );
97- compileTaskOptions . getRelease (). set ( releaseVersion . asInt () );
60+ configureCompileTasks ( project , mainSourceSet , jdkVersionsConfig );
61+ configureTestTasks ( project , jdkVersionsConfig );
62+ configureJavadocTasks ( project , mainSourceSet , jdkVersionsConfig );
9863 }
9964
100- private void configureCompileTasks (Project project ) {
65+ private void configureCompileTasks (Project project , SourceSet mainSourceSet , JdkVersionConfig jdkVersionsConfig ) {
10166 project .getTasks ().withType ( JavaCompile .class ).configureEach ( new Action <JavaCompile >() {
10267 @ Override
10368 public void execute (JavaCompile compileTask ) {
10469 addJvmArgs ( compileTask ,
10570 project .property ( "toolchain.compiler.jvmargs" ).toString ().split ( " " )
10671 );
107- compileTask .doFirst (
108- new Action <Task >() {
109- @ Override
110- public void execute (Task task ) {
111- project .getLogger ().lifecycle (
112- "Compiling with '{}'" ,
113- compileTask .getJavaCompiler ().get ().getMetadata ().getInstallationPath ()
114- );
72+ if ( compileTask .getName ().equals ( mainSourceSet .getCompileJavaTaskName () ) ) {
73+ compileTask .getOptions ().getRelease ().set ( jdkVersionsConfig .getMainReleaseVersion ().asInt () );
74+ if ( jdkVersionsConfig .getMain ().isExplicit () ) {
75+ compileTask .getJavaCompiler ().set (
76+ toolchainService .compilerFor ( javaToolchainSpec -> {
77+ javaToolchainSpec .getLanguageVersion ()
78+ .set ( jdkVersionsConfig .getMainCompilerVersion () );
79+ } )
80+ );
81+ }
82+ }
83+ // Assume all non-main compile tasks are test compile tasks,
84+ // because that's currently true,
85+ // and there is no way to automatically determine whether a custom compile task if for main code or tests.
86+ else {
87+ compileTask .getOptions ().getRelease ().set ( jdkVersionsConfig .getTestReleaseVersion ().asInt () );
88+ if ( jdkVersionsConfig .getTest ().isExplicit () ) {
89+ compileTask .getJavaCompiler ().set (
90+ toolchainService .compilerFor ( javaToolchainSpec -> {
91+ javaToolchainSpec .getLanguageVersion ().set ( jdkVersionsConfig .getTestCompilerVersion () );
92+ } )
93+ );
94+ }
95+ }
96+ if ( jdkVersionsConfig .isExplicit () ) {
97+ compileTask .doFirst (
98+ new Action <Task >() {
99+ @ Override
100+ public void execute (Task task ) {
101+ project .getLogger ().lifecycle (
102+ "Compiling with '{}'" ,
103+ compileTask .getJavaCompiler ().get ().getMetadata ().getInstallationPath ()
104+ );
105+ }
115106 }
116- }
117- );
107+ );
108+ }
118109 }
119110 } );
120111 }
121112
122- private void configureTestTasks (Project project ) {
113+ private void configureTestTasks (Project project , JdkVersionConfig jdkVersionsConfig ) {
123114 project .getTasks ().withType ( Test .class ).configureEach ( new Action <Test >() {
124115 @ Override
125116 public void execute (Test testTask ) {
@@ -135,33 +126,45 @@ public void execute(Test testTask) {
135126 )
136127 );
137128 }
138- testTask .doFirst (
139- new Action <Task >() {
140- @ Override
141- public void execute (Task task ) {
142- project .getLogger ().lifecycle (
143- "Testing with '{}'" ,
144- testTask .getJavaLauncher ().get ().getMetadata ().getInstallationPath ()
145- );
129+ if ( jdkVersionsConfig .getTest ().isExplicit () ) {
130+ testTask .getJavaLauncher ().set (
131+ toolchainService .launcherFor ( javaToolchainSpec -> {
132+ javaToolchainSpec .getLanguageVersion ()
133+ .set ( jdkVersionsConfig .getTestLauncherVersion () );
134+ } )
135+ );
136+ }
137+ if ( jdkVersionsConfig .isExplicit () ) {
138+ testTask .doFirst (
139+ new Action <Task >() {
140+ @ Override
141+ public void execute (Task task ) {
142+ project .getLogger ().lifecycle (
143+ "Testing with '{}'" ,
144+ testTask .getJavaLauncher ().get ().getMetadata ().getInstallationPath ()
145+ );
146+ }
146147 }
147- }
148- );
148+ );
149+ }
149150 }
150151 } );
151152 }
152153
153- private void configureJavadocTasks (Project project , SourceSet mainSourceSet ) {
154+ private void configureJavadocTasks (Project project , SourceSet mainSourceSet , JdkVersionConfig jdkVersionsConfig ) {
154155 project .getTasks ().named ( mainSourceSet .getJavadocTaskName (), Javadoc .class , (task ) -> {
155156 task .getOptions ().setJFlags ( javadocFlags ( project ) );
156- task .doFirst ( new Action <Task >() {
157- @ Override
158- public void execute (Task t ) {
159- project .getLogger ().lifecycle (
160- "Generating javadoc with '{}'" ,
161- task .getJavadocTool ().get ().getMetadata ().getInstallationPath ()
162- );
163- }
164- } );
157+ if ( jdkVersionsConfig .isExplicit () ) {
158+ task .doFirst ( new Action <Task >() {
159+ @ Override
160+ public void execute (Task t ) {
161+ project .getLogger ().lifecycle (
162+ "Generating javadoc with '{}'" ,
163+ task .getJavadocTool ().get ().getMetadata ().getInstallationPath ()
164+ );
165+ }
166+ } );
167+ }
165168 } );
166169 }
167170
0 commit comments