Default to optimized launch of the JVM when using Gradle's bootRun
Closes gh-16222
This commit is contained in:
@@ -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() {
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user