Skip to content

Commit 36120d7

Browse files
committed
Ignore mainClassName property when its value is null
Closes spring-projectsgh-9892
1 parent c2459fc commit 36120d7

File tree

3 files changed

+38
-9
lines changed

3 files changed

+38
-9
lines changed

spring-boot-tools/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/MainClassConvention.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,10 @@ final class MainClassConvention implements Callable<Object> {
4848
@Override
4949
public Object call() throws Exception {
5050
if (this.project.hasProperty("mainClassName")) {
51-
return this.project.property("mainClassName");
51+
Object mainClassName = this.project.property("mainClassName");
52+
if (mainClassName != null) {
53+
return mainClassName;
54+
}
5255
}
5356
return resolveMainClass();
5457
}

spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/run/BootRunIntegrationTests.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,7 @@ public class BootRunIntegrationTests {
4444

4545
@Test
4646
public void basicExecution() throws IOException {
47-
File output = new File(this.gradleBuild.getProjectDir(),
48-
"src/main/java/com/example");
49-
output.mkdirs();
50-
FileSystemUtils.copyRecursively(new File("src/test/java/com/example"), output);
47+
copyApplication();
5148
new File(this.gradleBuild.getProjectDir(), "src/main/resources").mkdirs();
5249
BuildResult result = this.gradleBuild.build("bootRun");
5350
assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
@@ -58,10 +55,7 @@ public void basicExecution() throws IOException {
5855

5956
@Test
6057
public void sourceResourcesCanBeUsed() throws IOException {
61-
File output = new File(this.gradleBuild.getProjectDir(),
62-
"src/main/java/com/example");
63-
output.mkdirs();
64-
FileSystemUtils.copyRecursively(new File("src/test/java/com/example"), output);
58+
copyApplication();
6559
BuildResult result = this.gradleBuild.build("bootRun");
6660
assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
6761
assertThat(result.getOutput()).contains("1. " + urlOf("src/main/resources"));
@@ -78,6 +72,16 @@ public void applicationPluginMainClassNameIsUsed() throws IOException {
7872
.contains("Main class name = com.example.CustomMainClass");
7973
}
8074

75+
@Test
76+
public void applicationPluginMainClassNameIsNotUsedWhenItIsNull() throws IOException {
77+
copyApplication();
78+
BuildResult result = this.gradleBuild.build("echoMainClassName");
79+
assertThat(result.task(":echoMainClassName").getOutcome())
80+
.isEqualTo(TaskOutcome.SUCCESS);
81+
assertThat(result.getOutput())
82+
.contains("Main class name = com.example.BootRunApplication");
83+
}
84+
8185
@Test
8286
public void applicationPluginJvmArgumentsAreUsed() throws IOException {
8387
BuildResult result = this.gradleBuild.build("echoJvmArguments");
@@ -87,6 +91,13 @@ public void applicationPluginJvmArgumentsAreUsed() throws IOException {
8791
.contains("JVM arguments = [-Dcom.foo=bar, -Dcom.bar=baz]");
8892
}
8993

94+
private void copyApplication() throws IOException {
95+
File output = new File(this.gradleBuild.getProjectDir(),
96+
"src/main/java/com/example");
97+
output.mkdirs();
98+
FileSystemUtils.copyRecursively(new File("src/test/java/com/example"), output);
99+
}
100+
90101
private String urlOf(String path) throws IOException {
91102
return new File(this.gradleBuild.getProjectDir().getCanonicalFile(), path).toURI()
92103
.toURL().toString();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
buildscript {
2+
dependencies {
3+
classpath files(pluginClasspath.split(','))
4+
}
5+
}
6+
7+
apply plugin: 'application'
8+
apply plugin: 'org.springframework.boot'
9+
10+
task echoMainClassName {
11+
dependsOn compileJava
12+
doLast {
13+
println 'Main class name = ' + bootRun.main
14+
}
15+
}

0 commit comments

Comments
 (0)