diff --git a/liberty-maven-plugin/src/it/server-param-pom-override-it/pom.xml b/liberty-maven-plugin/src/it/server-param-pom-override-it/pom.xml
index 833581ad9..6bca7e75a 100644
--- a/liberty-maven-plugin/src/it/server-param-pom-override-it/pom.xml
+++ b/liberty-maven-plugin/src/it/server-param-pom-override-it/pom.xml
@@ -13,8 +13,10 @@
war
-
+ -javaagent:/path/to/some/jar.jar
+ @{myArgLine}
-Xms512m
+
-Xmx1024m
pom.xml
/opt/ibm/java
diff --git a/liberty-maven-plugin/src/it/server-param-pom-override-it/src/test/java/net/wasdev/wlp/maven/test/app/PluginConfigXmlIT.java b/liberty-maven-plugin/src/it/server-param-pom-override-it/src/test/java/net/wasdev/wlp/maven/test/app/PluginConfigXmlIT.java
index 2a3ef0dd2..b4b37ed09 100644
--- a/liberty-maven-plugin/src/it/server-param-pom-override-it/src/test/java/net/wasdev/wlp/maven/test/app/PluginConfigXmlIT.java
+++ b/liberty-maven-plugin/src/it/server-param-pom-override-it/src/test/java/net/wasdev/wlp/maven/test/app/PluginConfigXmlIT.java
@@ -15,7 +15,7 @@
import org.w3c.dom.NodeList;
import org.w3c.dom.Element;
-import static junit.framework.Assert.*;
+import static org.junit.Assert.*;
public class PluginConfigXmlIT {
@@ -126,8 +126,39 @@ public void testJvmOptionsFileElements() throws Exception {
String fileContents = FileUtils.fileRead(TARGET_JVM_OPTIONS).replaceAll("\r","");
- // verify that -Xmx768m is last in the jvm.options file, and that -Xms512m and -Xmx1024m appear before it.
- assertTrue("verify target server jvm.options", fileContents.equals( "# Generated by liberty-maven-plugin\n-Xms512m\n-Xmx1024m\n-Xmx768m\n") || fileContents.equals("# Generated by liberty-maven-plugin\n-Xmx1024m\n-Xms512m\n-Xmx768m\n"));
+ String[] fileContentsArray = fileContents.split("\\n");
+ assertTrue("fileContents", fileContentsArray.length == 5);
+
+ boolean myArgLineKeyFound = false;
+ boolean myArgLineValueFound = false;
+ boolean myXms512mFound = false;
+ boolean myXmx1024mFound = false;
+
+ for (int i=0; i < fileContentsArray.length; i++) {
+ String nextLine = fileContentsArray[i];
+ // verify that -Xmx768m is last in the jvm.options file, and that -Xms512m and -Xmx1024m appear before it.
+ if (i == 0) {
+ assertTrue("comment not found on first line", nextLine.equals("# Generated by liberty-maven-plugin"));
+ } else if (i == 4) {
+ assertTrue("-Xmx768m not found on last line", nextLine.equals("-Xmx768m"));
+ } else {
+ if (nextLine.equals("@{myArgLine}")) {
+ myArgLineKeyFound = true;
+ } else if (nextLine.equals("-Xms512m")) {
+ myXms512mFound = true;
+ } else if (nextLine.equals("-Xmx1024m")) {
+ myXmx1024mFound = true;
+ } else if (nextLine.equals("-javaagent:/path/to/some/jar.jar")) {
+ myArgLineValueFound = true;
+ }
+ }
+ }
+
+ assertFalse("@{myArgLine} found", myArgLineKeyFound);
+ assertTrue("-javaagent:/path/to/some/jar.jar not found", myArgLineValueFound);
+ assertTrue("-Xms512m not found", myXms512mFound);
+ assertTrue("-Xmx1024m not found", myXmx1024mFound);
+
}
@Test
diff --git a/liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/server/StartDebugMojoSupport.java b/liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/server/StartDebugMojoSupport.java
index b297e0615..a13b76fc7 100644
--- a/liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/server/StartDebugMojoSupport.java
+++ b/liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/server/StartDebugMojoSupport.java
@@ -82,6 +82,8 @@ public abstract class StartDebugMojoSupport extends ServerFeatureSupport {
protected static final String HEADER = "# Generated by liberty-maven-plugin";
private static final String LIBERTY_CONFIG_MAVEN_PROPS = "(^liberty\\.(env|jvm|bootstrap|var|defaultVar)\\.).+";
private static final Pattern pattern = Pattern.compile(LIBERTY_CONFIG_MAVEN_PROPS);
+ private static final String LATE_PROP_RESOLUTION_SYNTAX = "@\\{(.+?)\\}";
+ private static final Pattern LATE_PROP_PATTERN = Pattern.compile(LATE_PROP_RESOLUTION_SYNTAX);
private static boolean configFilesCopied = false;
@@ -796,6 +798,9 @@ private void loadLibertyConfigFromProperties(Properties props) {
if (propType != null) {
String suffix = key.substring(propType.getPrefix().length());
String value = (String) entry.getValue();
+ // Check the value for late property resolution with @{xxx} syntax.
+ value = handleLatePropertyResolution(value);
+
getLog().debug("Processing Liberty configuration from property with key "+key+" and value "+value);
switch (propType) {
case ENV: envMavenProps.put(suffix, value);
@@ -813,6 +818,23 @@ private void loadLibertyConfigFromProperties(Properties props) {
}
}
+ // Search the value parameter for any properties referenced with @{xxx} syntax and replace those with their property value if defined.
+ private String handleLatePropertyResolution(String value) {
+ String returnValue = value;
+
+ Matcher m = LATE_PROP_PATTERN.matcher(value);
+ while (m.find()) {
+ String varName = m.group(1);
+ if (project.getProperties().containsKey(varName)) {
+ String replacementValue = project.getProperties().getProperty(varName,"");
+ returnValue = returnValue.replace("@{"+varName+"}", replacementValue);
+ getLog().debug("Replaced Liberty configuration property value @{"+varName+"} with value "+replacementValue);
+ }
+ }
+
+ return returnValue;
+ }
+
// The properties parameter comes from the configuration in pom.xml and takes precedence over
// the mavenProperties parameter, which comes from generic maven configuration.
// One of the passed in Maps must be not null and not empty