Default to optimized launch of the JVM when using Gradle's bootRun

Closes gh-16222
This commit is contained in:
Andy Wilkinson
2019-04-18 10:13:02 +01:00
parent 7713a7f33a
commit 54b123028c
11 changed files with 188 additions and 28 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,19 +14,19 @@
* limitations under the License.
*/
package com.example;
package com.example.classpath;
import java.io.File;
import java.lang.management.ManagementFactory;
/**
* Very basic application used for testing {@code BootRun}.
* Application used for testing {@code BootRun}'s classpath handling.
*
* @author Andy Wilkinson
*/
public class BootRunApplication {
public class BootRunClasspathApplication {
protected BootRunApplication() {
protected BootRunClasspathApplication() {
}

View File

@@ -0,0 +1,39 @@
/*
* Copyright 2012-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.jvmargs;
import java.lang.management.ManagementFactory;
/**
* Application used for testing {@code BootRun}'s JVM argument handling.
*
* @author Andy Wilkinson
*/
public class BootRunJvmArgsApplication {
protected BootRunJvmArgsApplication() {
}
public static void main(String[] args) {
int i = 1;
for (String entry : ManagementFactory.getRuntimeMXBean().getInputArguments()) {
System.out.println(i++ + ". " + entry);
}
}
}

View File

@@ -69,4 +69,11 @@ public class RunningDocumentationTests {
.contains(new File("src/main/resources").getPath());
}
@TestTemplate
public void bootRunDisableOptimizedLaunch() throws IOException {
assertThat(this.gradleBuild
.script("src/main/gradle/running/boot-run-disable-optimized-launch")
.build("optimizedLaunch").getOutput()).contains("false");
}
}

View File

@@ -42,7 +42,7 @@ public class BootRunIntegrationTests {
@TestTemplate
public void basicExecution() throws IOException {
copyApplication();
copyClasspathApplication();
new File(this.gradleBuild.getProjectDir(), "src/main/resources").mkdirs();
BuildResult result = this.gradleBuild.build("bootRun");
assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
@@ -56,7 +56,7 @@ public class BootRunIntegrationTests {
@TestTemplate
public void sourceResourcesCanBeUsed() throws IOException {
copyApplication();
copyClasspathApplication();
BuildResult result = this.gradleBuild.build("bootRun");
assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
assertThat(result.getOutput())
@@ -87,28 +87,56 @@ public class BootRunIntegrationTests {
@TestTemplate
public void applicationPluginMainClassNameIsNotUsedWhenItIsNull() throws IOException {
copyApplication();
copyClasspathApplication();
BuildResult result = this.gradleBuild.build("echoMainClassName");
assertThat(result.task(":echoMainClassName").getOutcome())
.isEqualTo(TaskOutcome.SUCCESS);
assertThat(result.getOutput())
.contains("Main class name = com.example.BootRunApplication");
assertThat(result.getOutput()).contains(
"Main class name = com.example.classpath.BootRunClasspathApplication");
}
@TestTemplate
public void defaultJvmArgs() throws IOException {
copyJvmArgsApplication();
BuildResult result = this.gradleBuild.build("bootRun");
assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
assertThat(result.getOutput()).contains("1. -Xverify:none")
.contains("2. -XX:TieredStopAtLevel=1");
}
@TestTemplate
public void optimizedLaunchDisabledJvmArgs() throws IOException {
copyJvmArgsApplication();
BuildResult result = this.gradleBuild.build("bootRun");
assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
assertThat(result.getOutput()).doesNotContain("-Xverify:none")
.doesNotContain("-XX:TieredStopAtLevel=1");
}
@TestTemplate
public void applicationPluginJvmArgumentsAreUsed() throws IOException {
BuildResult result = this.gradleBuild.build("echoJvmArguments");
assertThat(result.task(":echoJvmArguments").getOutcome())
.isEqualTo(TaskOutcome.UP_TO_DATE);
assertThat(result.getOutput())
.contains("JVM arguments = [-Dcom.foo=bar, -Dcom.bar=baz]");
copyJvmArgsApplication();
BuildResult result = this.gradleBuild.build("bootRun");
assertThat(result.task(":bootRun").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
assertThat(result.getOutput()).contains("1. -Dcom.bar=baz")
.contains("2. -Dcom.foo=bar").contains("3. -Xverify:none")
.contains("4. -XX:TieredStopAtLevel=1");
}
private void copyApplication() throws IOException {
private void copyClasspathApplication() throws IOException {
copyApplication("classpath");
}
private void copyJvmArgsApplication() throws IOException {
copyApplication("jvmargs");
}
private void copyApplication(String name) throws IOException {
File output = new File(this.gradleBuild.getProjectDir(),
"src/main/java/com/example");
"src/main/java/com/example/" + name);
output.mkdirs();
FileSystemUtils.copyRecursively(new File("src/test/java/com/example"), output);
FileSystemUtils.copyRecursively(new File("src/test/java/com/example/" + name),
output);
}
private String canonicalPathOf(String path) throws IOException {