From ba34bf6470a480bd875f1ab8fb26d8099e25294f Mon Sep 17 00:00:00 2001
From: Vadeg <0xvadeg@gmail.com>
Date: Sat, 21 Oct 2017 13:18:52 +0200
Subject: [PATCH 1/2] Add system properties support using explicit
configuration tag
See gh-10741
---
.../src/it/run-disable-fork/pom.xml | 4 ++
.../src/it/run-disable-fork/verify.groovy | 2 +-
.../src/it/run-jvm-system-props/pom.xml | 37 ++++++++++
.../main/java/org/test/SampleApplication.java | 44 ++++++++++++
.../src/it/run-jvm-system-props/verify.groovy | 3 +
.../boot/maven/AbstractRunMojo.java | 68 +++++++++++++++++--
.../maven/SystemPropertyFormatterTests.java | 52 ++++++++++++++
7 files changed, 205 insertions(+), 5 deletions(-)
create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/pom.xml
create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/src/main/java/org/test/SampleApplication.java
create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/verify.groovy
create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/SystemPropertyFormatterTests.java
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/pom.xml
index 142c1c6829..84c639e071 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/pom.xml
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/pom.xml
@@ -26,6 +26,10 @@
false
-Dfoo=bar
${project.build.sourceDirectory}
+
+ value1
+
+
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/verify.groovy
index baaf7a9a59..93ce0736fa 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/verify.groovy
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/verify.groovy
@@ -2,6 +2,6 @@ import static org.junit.Assert.assertTrue
def file = new File(basedir, "build.log")
assertTrue file.text.contains("I haz been run")
-assertTrue file.text.contains("Fork mode disabled, ignoring JVM argument(s) [-Dfoo=bar]")
+assertTrue file.text.contains("Fork mode disabled, ignoring JVM argument(s) [-Dfoo=bar -Dproperty1=value1 -Dproperty2]")
assertTrue file.text.contains("Fork mode disabled, ignoring working directory configuration")
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/pom.xml
new file mode 100644
index 0000000000..318359736c
--- /dev/null
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/pom.xml
@@ -0,0 +1,37 @@
+
+
+ 4.0.0
+ org.springframework.boot.maven.it
+ run-jvmargs
+ 0.0.1.BUILD-SNAPSHOT
+
+ UTF-8
+ @java.version@
+ @java.version@
+
+
+
+
+ @project.groupId@
+ @project.artifactId@
+ @project.version@
+
+
+ package
+
+ run
+
+
+ -Dfoo="value 1" -Dbar=value2
+
+ value1
+
+
+
+
+
+
+
+
+
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/src/main/java/org/test/SampleApplication.java
new file mode 100644
index 0000000000..165822591e
--- /dev/null
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/src/main/java/org/test/SampleApplication.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2012-2017 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
+ *
+ * http://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 org.test;
+
+public class SampleApplication {
+
+ public static void main(String[] args) {
+ String foo = System.getProperty("foo");
+ if (!"value 1".equals(foo)) {
+ throw new IllegalStateException("foo system property mismatch (got [" + foo + "]");
+ }
+ String bar = System.getProperty("bar");
+ if (!"value2".equals(bar)) {
+ throw new IllegalStateException("bar system property mismatch (got [" + bar + "]");
+ }
+
+ String property1 = System.getProperty("property1");
+ if (!"value1".equals(property1)) {
+ throw new IllegalStateException("property1 system property mismatch (got [" + property1 + "]");
+ }
+
+ String property2 = System.getProperty("property2");
+ if (!"".equals(property2)) {
+ throw new IllegalStateException("property1 system property mismatch (got [" + property2 + "]");
+ }
+
+ System.out.println("I haz been run");
+ }
+
+}
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/verify.groovy
new file mode 100644
index 0000000000..841c4a97de
--- /dev/null
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/verify.groovy
@@ -0,0 +1,3 @@
+def file = new File(basedir, "build.log")
+return file.text.contains("I haz been run")
+
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java
index 3ec06db410..2923de3417 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java
@@ -25,7 +25,9 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.model.Resource;
@@ -169,6 +171,15 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
@Parameter(property = "spring-boot.run.skip", defaultValue = "false")
private boolean skip;
+ /**
+ * List of JVM system properties. System property consists of key and value
+ * and it will be transformed to -Dkey=value format.
+ * In case if value is not specified or empty only key will be provided.
+ * @since 2.0
+ */
+ @Parameter(property = "spring-boot.run.systemPropertyVariabled")
+ private Map systemPropertyVariables;
+
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
if (this.skip) {
@@ -201,7 +212,8 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
}
private boolean hasJvmArgs() {
- return (this.jvmArguments != null && !this.jvmArguments.isEmpty());
+ return (this.jvmArguments != null && !this.jvmArguments.isEmpty()) ||
+ (this.systemPropertyVariables != null && !this.systemPropertyVariables.isEmpty());
}
private boolean hasWorkingDirectorySet() {
@@ -232,8 +244,22 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
getLog().warn("Fork mode disabled, ignoring agent");
}
if (hasJvmArgs()) {
- getLog().warn("Fork mode disabled, ignoring JVM argument(s) ["
- + this.jvmArguments + "]");
+ String messageTemplate = "Fork mode disabled, ignoring JVM argument(s) [%s%s]";
+ String sysPropsStr = "";
+ if (this.systemPropertyVariables != null && !this.systemPropertyVariables.isEmpty()) {
+ sysPropsStr = this.systemPropertyVariables
+ .entrySet()
+ .stream()
+ .map(e -> SystemPropertyFormatter.format(e.getKey(), e.getValue()))
+ .collect(Collectors.joining(" "));
+ }
+ String message = String.format(
+ messageTemplate,
+ this.jvmArguments,
+ sysPropsStr.isEmpty() ? sysPropsStr : " " + sysPropsStr
+ );
+
+ getLog().warn(message);
}
if (hasWorkingDirectorySet()) {
getLog().warn("Fork mode disabled, ignoring working directory configuration");
@@ -292,7 +318,22 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
* @return a {@link RunArguments} defining the JVM arguments
*/
protected RunArguments resolveJvmArguments() {
- return new RunArguments(this.jvmArguments);
+ final StringBuilder stringBuilder = new StringBuilder();
+ if (this.jvmArguments != null) {
+ stringBuilder.append(this.jvmArguments);
+ }
+ if (this.systemPropertyVariables != null) {
+ String result = this.systemPropertyVariables
+ .entrySet()
+ .stream()
+ .map(e -> SystemPropertyFormatter.format(e.getKey(), e.getValue()))
+ .collect(Collectors.joining(" "));
+ stringBuilder
+ .append(" ")
+ .append(result);
+
+ }
+ return new RunArguments(stringBuilder.toString());
}
private void addJvmArgs(List args) {
@@ -509,4 +550,23 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
}
+ /**
+ * System properties formatter.
+ */
+ static class SystemPropertyFormatter {
+
+ private static final String NO_VALUE_FORMAT = "-D%s";
+ private static final String KEY_VALUE_FORMAT = NO_VALUE_FORMAT + "=%s";
+
+ public static String format(Object key, Object value) {
+ if (key == null) {
+ return "";
+ }
+ if (value == null || String.valueOf(value).trim().isEmpty()) {
+ return String.format(NO_VALUE_FORMAT, key);
+ }
+ return String.format(KEY_VALUE_FORMAT, key, value);
+ }
+ }
+
}
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/SystemPropertyFormatterTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/SystemPropertyFormatterTests.java
new file mode 100644
index 0000000000..97038d636c
--- /dev/null
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/SystemPropertyFormatterTests.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2012-2017 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
+ *
+ * http://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 org.springframework.boot.maven;
+
+import org.assertj.core.api.Assertions;
+import org.junit.Test;
+
+import org.springframework.boot.maven.AbstractRunMojo.SystemPropertyFormatter;
+
+/**
+ * Tests for {@link AbstractRunMojo.SystemPropertyFormatter}
+ */
+public class SystemPropertyFormatterTests {
+
+ @Test
+ public void parseEmpty() throws Exception {
+ Assertions.assertThat(SystemPropertyFormatter.format(null, null))
+ .isEqualTo("");
+ }
+
+ @Test
+ public void parseOnlyKey() throws Exception {
+ Assertions.assertThat(SystemPropertyFormatter.format("key1", null))
+ .isEqualTo("-Dkey1");
+ }
+
+ @Test
+ public void parseKeyWithValue() throws Exception {
+ Assertions.assertThat(SystemPropertyFormatter.format("key1", "value1"))
+ .isEqualTo("-Dkey1=value1");
+ }
+
+ @Test
+ public void parseKeyWithEmptyValue() throws Exception {
+ Assertions.assertThat(SystemPropertyFormatter.format("key1", ""))
+ .isEqualTo("-Dkey1");
+ }
+}
From 03539d8e16e6333790af7b4f0b19042cce44b187 Mon Sep 17 00:00:00 2001
From: Stephane Nicoll
Date: Tue, 24 Apr 2018 11:42:49 +0200
Subject: [PATCH 2/2] Polish "Add system properties support using explicit
configuration tag"
Closes gh-10741
---
.../src/it/run-disable-fork/verify.groovy | 2 +-
.../src/it/run-jvm-system-props/pom.xml | 2 +
.../main/java/org/test/SampleApplication.java | 11 ++--
.../boot/maven/AbstractRunMojo.java | 57 +++++++-----------
.../apt/examples/run-system-properties.apt.vm | 59 +++++++++++++++++++
.../src/site/apt/index.apt | 2 +
.../src/site/apt/usage.apt.vm | 9 ++-
.../src/site/site.xml | 1 +
.../maven/SystemPropertyFormatterTests.java | 27 ++++-----
9 files changed, 111 insertions(+), 59 deletions(-)
create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/examples/run-system-properties.apt.vm
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/verify.groovy
index 93ce0736fa..752e0988f0 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/verify.groovy
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-disable-fork/verify.groovy
@@ -2,6 +2,6 @@ import static org.junit.Assert.assertTrue
def file = new File(basedir, "build.log")
assertTrue file.text.contains("I haz been run")
-assertTrue file.text.contains("Fork mode disabled, ignoring JVM argument(s) [-Dfoo=bar -Dproperty1=value1 -Dproperty2]")
+assertTrue file.text.contains("Fork mode disabled, ignoring JVM argument(s) [-Dproperty1=value1 -Dproperty2 -Dfoo=bar]")
assertTrue file.text.contains("Fork mode disabled, ignoring working directory configuration")
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/pom.xml
index 318359736c..92f46e8ea6 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/pom.xml
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/pom.xml
@@ -27,6 +27,8 @@
value1
+ ${project.artifactId}
+ should-be-ignored
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/src/main/java/org/test/SampleApplication.java
index 165822591e..4932bfc419 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/src/main/java/org/test/SampleApplication.java
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/run-jvm-system-props/src/main/java/org/test/SampleApplication.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2012-2017 the original author or authors.
+ * Copyright 2012-2018 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.
@@ -27,17 +27,18 @@ public class SampleApplication {
if (!"value2".equals(bar)) {
throw new IllegalStateException("bar system property mismatch (got [" + bar + "]");
}
-
String property1 = System.getProperty("property1");
if (!"value1".equals(property1)) {
throw new IllegalStateException("property1 system property mismatch (got [" + property1 + "]");
}
-
String property2 = System.getProperty("property2");
if (!"".equals(property2)) {
- throw new IllegalStateException("property1 system property mismatch (got [" + property2 + "]");
+ throw new IllegalStateException("property2 system property mismatch (got [" + property2 + "]");
+ }
+ String property3 = System.getProperty("property3");
+ if (!"run-jvmargs".equals(property3)) {
+ throw new IllegalStateException("property3 system property mismatch (got [" + property3 + "]");
}
-
System.out.println("I haz been run");
}
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java
index 2923de3417..2eb74cad2b 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java
@@ -107,6 +107,14 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
@Parameter(property = "spring-boot.run.jvmArguments")
private String jvmArguments;
+ /**
+ * List of JVM system properties to pass to the process. NOTE: the use of system
+ * properties means that processes will be started by forking a new JVM.
+ * @since 2.1.0
+ */
+ @Parameter
+ private Map systemPropertyVariables;
+
/**
* Arguments that should be passed to the application. On command line use commas to
* separate multiple arguments.
@@ -171,15 +179,6 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
@Parameter(property = "spring-boot.run.skip", defaultValue = "false")
private boolean skip;
- /**
- * List of JVM system properties. System property consists of key and value
- * and it will be transformed to -Dkey=value format.
- * In case if value is not specified or empty only key will be provided.
- * @since 2.0
- */
- @Parameter(property = "spring-boot.run.systemPropertyVariabled")
- private Map systemPropertyVariables;
-
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
if (this.skip) {
@@ -213,7 +212,8 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
private boolean hasJvmArgs() {
return (this.jvmArguments != null && !this.jvmArguments.isEmpty()) ||
- (this.systemPropertyVariables != null && !this.systemPropertyVariables.isEmpty());
+ (this.systemPropertyVariables != null
+ && !this.systemPropertyVariables.isEmpty());
}
private boolean hasWorkingDirectorySet() {
@@ -244,22 +244,10 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
getLog().warn("Fork mode disabled, ignoring agent");
}
if (hasJvmArgs()) {
- String messageTemplate = "Fork mode disabled, ignoring JVM argument(s) [%s%s]";
- String sysPropsStr = "";
- if (this.systemPropertyVariables != null && !this.systemPropertyVariables.isEmpty()) {
- sysPropsStr = this.systemPropertyVariables
- .entrySet()
- .stream()
- .map(e -> SystemPropertyFormatter.format(e.getKey(), e.getValue()))
- .collect(Collectors.joining(" "));
- }
- String message = String.format(
- messageTemplate,
- this.jvmArguments,
- sysPropsStr.isEmpty() ? sysPropsStr : " " + sysPropsStr
- );
-
- getLog().warn(message);
+ RunArguments runArguments = resolveJvmArguments();
+ getLog().warn("Fork mode disabled, ignoring JVM argument(s) ["
+ + Arrays.stream(runArguments.asArray()).collect(
+ Collectors.joining(" ")) + "]");
}
if (hasWorkingDirectorySet()) {
getLog().warn("Fork mode disabled, ignoring working directory configuration");
@@ -319,19 +307,15 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
*/
protected RunArguments resolveJvmArguments() {
final StringBuilder stringBuilder = new StringBuilder();
- if (this.jvmArguments != null) {
- stringBuilder.append(this.jvmArguments);
- }
if (this.systemPropertyVariables != null) {
- String result = this.systemPropertyVariables
+ stringBuilder.append(this.systemPropertyVariables
.entrySet()
.stream()
.map(e -> SystemPropertyFormatter.format(e.getKey(), e.getValue()))
- .collect(Collectors.joining(" "));
- stringBuilder
- .append(" ")
- .append(result);
-
+ .collect(Collectors.joining(" ")));
+ }
+ if (this.jvmArguments != null) {
+ stringBuilder.append(" ").append(this.jvmArguments);
}
return new RunArguments(stringBuilder.toString());
}
@@ -551,11 +535,12 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
}
/**
- * System properties formatter.
+ * Format System properties.
*/
static class SystemPropertyFormatter {
private static final String NO_VALUE_FORMAT = "-D%s";
+
private static final String KEY_VALUE_FORMAT = NO_VALUE_FORMAT + "=%s";
public static String format(Object key, Object value) {
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/examples/run-system-properties.apt.vm b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/examples/run-system-properties.apt.vm
new file mode 100644
index 0000000000..c1041e657a
--- /dev/null
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/examples/run-system-properties.apt.vm
@@ -0,0 +1,59 @@
+ -----
+ Using System Properties
+ -----
+ Stephane Nicoll
+ -----
+ 2018-04-24
+ -----
+
+ System properties can be specified using the <<>> attribute.
+ The following sets <<>> to <<>> and <<>> to 42:
+
+---
+
+ ...
+
+
+ 42
+
+ ...
+
+ ...
+
+ ${project.groupId}
+ ${project.artifactId}
+ ${project.version}
+
+
+ test
+ ${my.value}
+
+
+ ...
+
+ ...
+
+ ...
+
+ ...
+
+---
+
+ If the value is empty or not defined (i.e. <<<>>>), the system property
+ is set with an empty String as the value.
+
+ Any String typed Maven variable can be passed as system properties. Any attempt to pass
+ any other Maven variable type (e.g. a <<>> or a <<>> variable) will cause the
+ variable expression to be passed literally (unevaluated).
+
+ The <<>> parameter takes precedence over system properties defined with
+ the mechanism above. In the following example, the value for <<>> is
+ <<>>:
+
+
+---
+mvn spring-boot:run -Dspring-boot.jvmArguments="-Dproperty1=overridden"
+---
+
+
+
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/index.apt b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/index.apt
index a1f9db3d25..f3e47a5d96 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/index.apt
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/index.apt
@@ -52,6 +52,8 @@ Spring Boot Maven Plugin
* {{{./examples/run-debug.html}Debug the application}}
+ * {{{./examples/run-system-properties.html}Using system properties}}
+
* {{{./examples/it-random-port.html}Random port for integration tests}}
* {{{./examples/it-skip.html}Skip integration tests}}
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/usage.apt.vm b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/usage.apt.vm
index 3452b1340b..ffa09b3e1f 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/usage.apt.vm
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/usage.apt.vm
@@ -135,12 +135,15 @@ mvn spring-boot:run
By default the application is executed directly from the Maven JVM. If you need to run
in a forked process you can use the 'fork' option. Forking will also occur if the
- 'jvmArguments' or 'agent' options are specified, or if devtools is present.
+ 'jvmArguments', 'systemPropertyVariables' or 'agent' options are specified, or if
+ devtools is present.
If you need to specify some JVM arguments (i.e. for debugging purposes), you can use
the <<>> parameter, see {{{./examples/run-debug.html}Debug the application}}
- for more details. As a convenience, the profiles to enable are handled by a specific
- property (<<>>), see {{{./examples/run-profiles.html}Specify active profiles}}.
+ for more details. There is also explicit support
+ {{{./examples/run-system-properties.html}for system properties}}. As a convenience, the
+ profiles to enable are handled by a specific property (<<>>), see
+ {{{./examples/run-profiles.html}Specify active profiles}}.
Spring Boot 1.3 has introduced <<>>, a module to improve the development-time
experience when working on Spring Boot applications. To enable it, just add the following
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/site.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/site.xml
index 2ecc646eca..5e1157ab54 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/site.xml
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/site/site.xml
@@ -11,6 +11,7 @@
+
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/SystemPropertyFormatterTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/SystemPropertyFormatterTests.java
index 97038d636c..50b360980b 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/SystemPropertyFormatterTests.java
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/SystemPropertyFormatterTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2012-2017 the original author or authors.
+ * Copyright 2012-2018 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.
@@ -16,37 +16,36 @@
package org.springframework.boot.maven;
-import org.assertj.core.api.Assertions;
import org.junit.Test;
import org.springframework.boot.maven.AbstractRunMojo.SystemPropertyFormatter;
+import static org.assertj.core.api.Assertions.assertThat;
+
/**
- * Tests for {@link AbstractRunMojo.SystemPropertyFormatter}
+ * Tests for {@link AbstractRunMojo.SystemPropertyFormatter}.
*/
public class SystemPropertyFormatterTests {
@Test
- public void parseEmpty() throws Exception {
- Assertions.assertThat(SystemPropertyFormatter.format(null, null))
- .isEqualTo("");
+ public void parseEmpty() {
+ assertThat(SystemPropertyFormatter.format(null, null)).isEqualTo("");
}
@Test
- public void parseOnlyKey() throws Exception {
- Assertions.assertThat(SystemPropertyFormatter.format("key1", null))
- .isEqualTo("-Dkey1");
+ public void parseOnlyKey() {
+ assertThat(SystemPropertyFormatter.format("key1", null)).isEqualTo("-Dkey1");
}
@Test
- public void parseKeyWithValue() throws Exception {
- Assertions.assertThat(SystemPropertyFormatter.format("key1", "value1"))
+ public void parseKeyWithValue() {
+ assertThat(SystemPropertyFormatter.format("key1", "value1"))
.isEqualTo("-Dkey1=value1");
}
@Test
- public void parseKeyWithEmptyValue() throws Exception {
- Assertions.assertThat(SystemPropertyFormatter.format("key1", ""))
- .isEqualTo("-Dkey1");
+ public void parseKeyWithEmptyValue() {
+ assertThat(SystemPropertyFormatter.format("key1", "")).isEqualTo("-Dkey1");
}
+
}