Skip to content

Commit

Permalink
Add late prop resolution for Liberty configuration specified by Maven…
Browse files Browse the repository at this point in the history
… properties
  • Loading branch information
cherylking committed Jul 5, 2023
1 parent f7b7867 commit dd11fec
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@
<packaging>war</packaging>

<properties>
<!-- This maxHeap property should NOT override the one specified below in jvmOptions -->
<myArgLine>-javaagent:/path/to/some/jar.jar</myArgLine>
<liberty.jvm.argLine>@{myArgLine}</liberty.jvm.argLine>
<liberty.jvm.minHeap>-Xms512m</liberty.jvm.minHeap>
<!-- This maxHeap property should NOT override the one specified below in jvmOptions -->
<liberty.jvm.maxHeap>-Xmx1024m</liberty.jvm.maxHeap>
<liberty.bootstrap.location>pom.xml</liberty.bootstrap.location>
<liberty.env.JAVA_HOME>/opt/ibm/java</liberty.env.JAVA_HOME>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand All @@ -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 <bootstrapProperties> configuration in pom.xml and takes precedence over
// the mavenProperties parameter, which comes from generic maven <properties> configuration.
// One of the passed in Maps must be not null and not empty
Expand Down

0 comments on commit dd11fec

Please sign in to comment.