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