18
18
import org .gradle .api .plugins .JavaPluginExtension ;
19
19
import org .gradle .api .tasks .SourceSet ;
20
20
import org .gradle .api .tasks .SourceSetContainer ;
21
- import org .gradle .api .tasks .compile .CompileOptions ;
22
21
import org .gradle .api .tasks .compile .ForkOptions ;
23
22
import org .gradle .api .tasks .compile .JavaCompile ;
24
23
import org .gradle .api .tasks .javadoc .Javadoc ;
25
24
import org .gradle .api .tasks .testing .Test ;
26
- import org .gradle .jvm .toolchain .JavaLanguageVersion ;
27
25
import org .gradle .jvm .toolchain .JavaToolchainService ;
28
26
29
27
/**
@@ -54,72 +52,65 @@ public void apply(Project project) {
54
52
55
53
final SourceSetContainer sourceSets = javaPluginExtension .getSourceSets ();
56
54
final SourceSet mainSourceSet = sourceSets .getByName ( SourceSet .MAIN_SOURCE_SET_NAME );
57
- final SourceSet testSourceSet = sourceSets .getByName ( SourceSet .TEST_SOURCE_SET_NAME );
58
55
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 () ) {
71
57
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
- }
92
58
}
93
- }
94
59
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 );
98
63
}
99
64
100
- private void configureCompileTasks (Project project ) {
65
+ private void configureCompileTasks (Project project , SourceSet mainSourceSet , JdkVersionConfig jdkVersionsConfig ) {
101
66
project .getTasks ().withType ( JavaCompile .class ).configureEach ( new Action <JavaCompile >() {
102
67
@ Override
103
68
public void execute (JavaCompile compileTask ) {
104
69
addJvmArgs ( compileTask ,
105
70
project .property ( "toolchain.compiler.jvmargs" ).toString ().split ( " " )
106
71
);
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
+ }
115
106
}
116
- }
117
- );
107
+ );
108
+ }
118
109
}
119
110
} );
120
111
}
121
112
122
- private void configureTestTasks (Project project ) {
113
+ private void configureTestTasks (Project project , JdkVersionConfig jdkVersionsConfig ) {
123
114
project .getTasks ().withType ( Test .class ).configureEach ( new Action <Test >() {
124
115
@ Override
125
116
public void execute (Test testTask ) {
@@ -135,33 +126,45 @@ public void execute(Test testTask) {
135
126
)
136
127
);
137
128
}
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
+ }
146
147
}
147
- }
148
- );
148
+ );
149
+ }
149
150
}
150
151
} );
151
152
}
152
153
153
- private void configureJavadocTasks (Project project , SourceSet mainSourceSet ) {
154
+ private void configureJavadocTasks (Project project , SourceSet mainSourceSet , JdkVersionConfig jdkVersionsConfig ) {
154
155
project .getTasks ().named ( mainSourceSet .getJavadocTaskName (), Javadoc .class , (task ) -> {
155
156
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
+ }
165
168
} );
166
169
}
167
170
0 commit comments