diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc b/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc index 1de2476b761..22029c01246 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/main/asciidoc/reacting.adoc @@ -21,6 +21,7 @@ plugin: 5. Creates a configuration named `bootArchives` that contains the artifact produced by the `bootJar` task. 6. Configures any `JavaCompile` tasks with no configured encoding to use `UTF-8`. +7. Configures any `JavaCompile` tasks to use the `-parameters` compiler argument. diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java index 9156863f83e..1359dfd9056 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/JavaPluginAction.java @@ -17,6 +17,7 @@ package org.springframework.boot.gradle.plugin; import java.util.Collections; +import java.util.List; import java.util.concurrent.Callable; import org.gradle.api.Action; @@ -41,6 +42,7 @@ import org.springframework.boot.gradle.tasks.run.BootRun; */ final class JavaPluginAction implements PluginApplicationAction { + private static final String PARAMETERS_COMPILER_ARG = "-parameters"; private final SinglePublishedArtifact singlePublishedArtifact; JavaPluginAction(SinglePublishedArtifact singlePublishedArtifact) { @@ -60,6 +62,7 @@ final class JavaPluginAction implements PluginApplicationAction { configureArtifactPublication(project, bootJar); configureBootRunTask(project); configureUtf8Encoding(project); + configureParametersCompilerArg(project); } private void disableJarTask(Project project) { @@ -121,4 +124,13 @@ final class JavaPluginAction implements PluginApplicationAction { })); } + private void configureParametersCompilerArg(Project project) { + project.getTasks().withType(JavaCompile.class, (compile) -> { + List compilerArgs = compile.getOptions().getCompilerArgs(); + if (!compilerArgs.contains(PARAMETERS_COMPILER_ARG)) { + compilerArgs.add(PARAMETERS_COMPILER_ARG); + } + }); + } + } diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests.java b/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests.java index 068a3b838d4..53ab13366fa 100644 --- a/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests.java +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests.java @@ -73,6 +73,27 @@ public class JavaPluginActionIntegrationTests { .contains("compileTestJava = UTF-8"); } + @Test + public void javaCompileTasksUseParametersCompilerFlagByDefault() { + assertThat(this.gradleBuild.build("javaCompileTasksCompilerArgs").getOutput()) + .contains("compileJava compiler args: [-parameters]") + .contains("compileTestJava compiler args: [-parameters]"); + } + + @Test + public void javaCompileTasksUseParametersAndAdditionalCompilerFlags() { + assertThat(this.gradleBuild.build("javaCompileTasksCompilerArgs").getOutput()) + .contains("compileJava compiler args: [-parameters, -Xlint:all]") + .contains("compileTestJava compiler args: [-parameters, -Xlint:all]"); + } + + @Test + public void javaCompileTasksCanOverrideDefaultParametersCompilerFlag() { + assertThat(this.gradleBuild.build("javaCompileTasksCompilerArgs").getOutput()) + .contains("compileJava compiler args: [-Xlint:all]") + .contains("compileTestJava compiler args: [-Xlint:all]"); + } + @Test public void assembleRunsBootJarAndJarIsSkipped() { BuildResult result = this.gradleBuild.build("assemble"); diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksCanOverrideDefaultParametersCompilerFlag.gradle b/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksCanOverrideDefaultParametersCompilerFlag.gradle new file mode 100644 index 00000000000..ad4850a8a58 --- /dev/null +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksCanOverrideDefaultParametersCompilerFlag.gradle @@ -0,0 +1,21 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'org.springframework.boot' +apply plugin: 'java' + +tasks.withType(JavaCompile) { + options.compilerArgs = ['-Xlint:all'] +} + + +task('javaCompileTasksCompilerArgs') { + doFirst { + tasks.withType(JavaCompile) { + println "$name compiler args: ${options.compilerArgs}" + } + } +} diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersAndAdditionalCompilerFlags.gradle b/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersAndAdditionalCompilerFlags.gradle new file mode 100644 index 00000000000..f72a0ca1061 --- /dev/null +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersAndAdditionalCompilerFlags.gradle @@ -0,0 +1,20 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'org.springframework.boot' +apply plugin: 'java' + +tasks.withType(JavaCompile) { + options.compilerArgs << '-Xlint:all' +} + +task('javaCompileTasksCompilerArgs') { + doFirst { + tasks.withType(JavaCompile) { + println "$name compiler args: ${options.compilerArgs}" + } + } +} diff --git a/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersCompilerFlagByDefault.gradle b/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersCompilerFlagByDefault.gradle new file mode 100644 index 00000000000..fec32ce90f3 --- /dev/null +++ b/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/plugin/JavaPluginActionIntegrationTests-javaCompileTasksUseParametersCompilerFlagByDefault.gradle @@ -0,0 +1,16 @@ +buildscript { + dependencies { + classpath files(pluginClasspath.split(',')) + } +} + +apply plugin: 'org.springframework.boot' +apply plugin: 'java' + +task('javaCompileTasksCompilerArgs') { + doFirst { + tasks.withType(JavaCompile) { + println "$name compiler args: ${options.compilerArgs}" + } + } +}