diff --git a/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/pom.xml b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/pom.xml
new file mode 100644
index 00000000..ff08d014
--- /dev/null
+++ b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/pom.xml
@@ -0,0 +1,124 @@
+
+
+ 4.0.0
+
+ io.openliberty.tools.it
+ test-liberty-dev-mode
+ 1.0-SNAPSHOT
+ jar
+
+
+ UTF-8
+ UTF-8
+ 1.7
+ 1.7
+
+
+
+
+ junit
+ junit
+ 4.12
+
+
+ io.openliberty.tools
+ liberty-maven-plugin
+ 3.0.1
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ 2.19.1
+
+ true
+ once
+ 1200
+ -enableassertions
+ ${project.build.directory}
+
+ **/*Test.java
+
+
+ @pom.version@
+ ${runtimeVersion}
+
+ false
+
+
+
+ integration-test
+
+ integration-test
+
+
+
+ verify
+ install
+
+ verify
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.19.1
+
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.1.0
+
+
+
+ test-jar
+
+
+
+
+
+
+
+
+
+ ol
+
+
+ boostRuntime
+ ol
+
+
+
+
+ wlp
+
+
+ boostRuntime
+ wlp
+
+
+
+
+ tomee
+
+
+ boostRuntime
+ tomee
+
+
+
+ true
+
+
+
+
+
diff --git a/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/resources/SystemHealth.java b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/resources/SystemHealth.java
new file mode 100644
index 00000000..b187fc1d
--- /dev/null
+++ b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/resources/SystemHealth.java
@@ -0,0 +1,20 @@
+package com.demo;
+
+import javax.enterprise.context.ApplicationScoped;
+import org.eclipse.microprofile.health.Health;
+import org.eclipse.microprofile.health.HealthCheck;
+import org.eclipse.microprofile.health.HealthCheckResponse;
+
+@Health
+@ApplicationScoped
+public class SystemHealth implements HealthCheck {
+ @Override
+ public HealthCheckResponse call() {
+ if (!System.getProperty("wlp.server.name").startsWith("defaultServer")) {
+ return HealthCheckResponse.named(HelloWorld.class.getSimpleName())
+ .withData("default server", "not available").down().build();
+ }
+ return HealthCheckResponse.named(HelloWorld.class.getSimpleName()).withData("default server", "available").up()
+ .build();
+ }
+}
diff --git a/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/resources/basic-dev-project/pom.xml b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/resources/basic-dev-project/pom.xml
new file mode 100644
index 00000000..12b5903f
--- /dev/null
+++ b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/resources/basic-dev-project/pom.xml
@@ -0,0 +1,178 @@
+
+
+
+ 4.0.0
+
+ boost.it
+ dev-sample-proj
+ 1.0-SNAPSHOT
+ war
+
+
+ UTF-8
+ UTF-8
+ 1.7
+ 1.7
+ 9000
+
+
+
+
+
+ sonatype-nexus-snapshots
+ Sonatype Nexus Snapshots
+ https://oss.sonatype.org/content/repositories/snapshots/
+
+ true
+
+
+ false
+
+
+
+
+
+
+
+ org.microshed.boost.boms
+ mp14-bom
+ RUNTIME_VERSION
+ pom
+ import
+
+
+
+
+
+
+
+ org.microshed.boost.runtimes
+ openliberty
+
+
+ org.microshed.boost.boosters
+ jaxrs
+
+
+ org.microshed.boost.boosters
+ jsonp
+
+
+ org.microshed.boost.boosters
+ cdi
+
+
+ org.microshed.boost.boosters
+ mp-config
+
+
+ org.microshed.boost.boosters
+ mp-rest-client
+
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.apache.cxf
+ cxf-rt-rs-client
+ 3.2.6
+ test
+
+
+ org.apache.cxf
+ cxf-rt-rs-extension-providers
+ 3.2.6
+ test
+
+
+ org.glassfish
+ javax.json
+ 1.0.4
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ 3.2.2
+
+ false
+ pom.xml
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.0.0-M1
+
+
+ test
+ default-test
+
+
+ **/it/**
+
+ ${project.build.directory}/test-reports/unit
+
+
+
+
+
+
+ org.microshed.boost
+ boost-maven-plugin
+ RUNTIME_VERSION
+
+
+
+ package
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ 3.0.0-M1
+
+
+ integration-test
+ integration-test
+
+ integration-test
+
+
+
+ **/it/**/*.java
+
+
+
+
+ verify-results
+
+ verify
+
+
+
+
+ ${project.build.directory}/test-reports/it/failsafe-summary.xml
+ ${project.build.directory}/test-reports/it
+
+
+
+
+
diff --git a/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/resources/basic-dev-project/src/main/java/com/demo/HelloWorld.java b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/resources/basic-dev-project/src/main/java/com/demo/HelloWorld.java
new file mode 100644
index 00000000..f8220202
--- /dev/null
+++ b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/resources/basic-dev-project/src/main/java/com/demo/HelloWorld.java
@@ -0,0 +1,8 @@
+package com.demo;
+
+public class HelloWorld {
+
+ public String helloWorld() {
+ return "helloWorld";
+ }
+}
diff --git a/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/resources/basic-dev-project/src/main/resources/placeHolder.txt b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/resources/basic-dev-project/src/main/resources/placeHolder.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/src/test/java/net/wasdev/wlp/test/dev/it/BaseDevTest.java b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/src/test/java/net/wasdev/wlp/test/dev/it/BaseDevTest.java
new file mode 100644
index 00000000..c1a07065
--- /dev/null
+++ b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/src/test/java/net/wasdev/wlp/test/dev/it/BaseDevTest.java
@@ -0,0 +1,211 @@
+/*******************************************************************************
+ * (c) Copyright IBM Corporation 2019.
+ *
+ * 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 net.wasdev.wlp.test.dev.it;
+
+import static org.junit.Assert.*;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Scanner;
+
+import org.apache.maven.shared.utils.io.FileUtils;
+
+public class BaseDevTest {
+
+ static File tempProj;
+ static File basicDevProj;
+ static File logFile;
+ static File targetDir;
+ static File pom;
+ static BufferedWriter writer;
+ static Process process;
+
+ static int logFileLineCount;
+
+ protected static void setUpBeforeClass(String devModeParams, String logFileName)
+ throws IOException, InterruptedException, FileNotFoundException {
+
+ logFileLineCount = 0;
+
+ tempProj = Files.createTempDirectory("temp").toFile();
+ assertTrue(tempProj.exists());
+
+ basicDevProj = new File("../resources/basic-dev-project");
+ assertTrue(basicDevProj.exists());
+
+ FileUtils.copyDirectoryStructure(basicDevProj, tempProj);
+ assertTrue(tempProj.listFiles().length > 0);
+
+ logFile = new File(logFileName + ".txt");
+ assertTrue(logFile.createNewFile());
+
+ pom = new File(tempProj, "pom.xml");
+ assertTrue(pom.exists());
+
+ replaceVersion();
+
+ startDevMode(devModeParams);
+ }
+
+ private static void startDevMode(String devModeParams)
+ throws IOException, InterruptedException, FileNotFoundException {
+ // run dev mode on project
+ StringBuilder command = new StringBuilder("mvn io.openliberty.tools:liberty-maven-plugin:3.0.1:dev");
+ if (devModeParams != null) {
+ command.append(" " + devModeParams);
+ }
+ ProcessBuilder builder = buildProcess(command.toString());
+
+ // builder.redirectError(logFile);
+ builder.redirectErrorStream(true);
+ builder.redirectOutput(logFile);
+ process = builder.start();
+ assertTrue(process.isAlive());
+
+ OutputStream stdin = process.getOutputStream();
+
+ writer = new BufferedWriter(new OutputStreamWriter(stdin));
+ }
+
+ protected static void cleanUpAfterClass(String testClassName) throws Exception {
+ stopDevMode();
+
+ if (tempProj != null && tempProj.exists()) {
+ File messagesLog = new File(tempProj, "target/liberty/wlp/usr/servers/defaultServer/logs/messages.log");
+ File copyMessagesLog = new File(testClassName + "_messages.log");
+ FileUtils.copyFile(messagesLog, copyMessagesLog);
+ FileUtils.deleteDirectory(tempProj);
+ }
+ }
+
+ protected static void stopDevMode() throws IOException, InterruptedException, FileNotFoundException {
+ markEndOfLogFile();
+
+ // shut down dev mode
+ if (writer != null) {
+ writer.write("exit"); // trigger dev mode to shut down
+ writer.flush();
+ writer.close();
+
+ // test that dev mode has stopped running.
+ assertTrue(checkLogForMessage("CWWKE0036I"));
+ }
+ }
+
+ protected static void testModifyJavaFile() throws IOException, InterruptedException {
+ // modify a java file
+ File srcHelloWorld = new File(tempProj, "src/main/java/com/demo/HelloWorld.java");
+ File targetHelloWorld = new File(targetDir, "classes/com/demo/HelloWorld.class");
+ assertTrue(srcHelloWorld.exists());
+ assertTrue(targetHelloWorld.exists());
+
+ long lastModified = targetHelloWorld.lastModified();
+ String str = "// testing";
+ BufferedWriter javaWriter = new BufferedWriter(new FileWriter(srcHelloWorld, true));
+ javaWriter.append(' ');
+ javaWriter.append(str);
+
+ javaWriter.close();
+
+ Thread.sleep(5000); // wait for compilation
+ boolean wasModified = targetHelloWorld.lastModified() > lastModified;
+ assertTrue(wasModified);
+ }
+
+ private static ProcessBuilder buildProcess(String processCommand) {
+ ProcessBuilder builder = new ProcessBuilder();
+ builder.directory(tempProj);
+
+ String os = System.getProperty("os.name");
+ if (os != null && os.toLowerCase().startsWith("windows")) {
+ builder.command("CMD", "/C", processCommand);
+ } else {
+ builder.command("bash", "-c", processCommand);
+ }
+ return builder;
+ }
+
+ private static void replaceVersion() throws IOException {
+ replaceString("RUNTIME_VERSION", "0.2.2-SNAPSHOT", pom);
+ }
+
+ protected static void replaceString(String str, String replacement, File file) throws IOException {
+ Path path = file.toPath();
+ Charset charset = StandardCharsets.UTF_8;
+
+ String content = new String(Files.readAllBytes(path), charset);
+
+ content = content.replaceAll(str, replacement);
+ Files.write(path, content.getBytes(charset));
+ }
+
+ protected static boolean checkLogForMessage(String message) throws InterruptedException, FileNotFoundException {
+
+ boolean found = false;
+
+ int timeout = 1;
+ while (!found && timeout <= 90) {
+ timeout++;
+ Thread.sleep(1000);
+
+ found = findMessageInLog(message);
+ }
+
+ return found;
+ }
+
+ protected static void markEndOfLogFile() throws FileNotFoundException {
+ Scanner scanner = new Scanner(logFile);
+
+ int lineCount = 0;
+ while (scanner.hasNextLine()) {
+ scanner.nextLine();
+ lineCount++;
+ }
+
+ logFileLineCount = lineCount;
+ }
+
+ private static boolean findMessageInLog(String message) throws FileNotFoundException {
+ Scanner scanner = new Scanner(logFile);
+
+ // Skip to last marked eof
+ skipLines(scanner);
+
+ while (scanner.hasNextLine()) {
+ String line = scanner.nextLine();
+ if (line.contains(message)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static void skipLines(Scanner scanner) {
+ for (int i = 0; i < logFileLineCount; i++) {
+ scanner.nextLine();
+ }
+ }
+}
diff --git a/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/src/test/java/net/wasdev/wlp/test/dev/it/DevHotTestingTest.java b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/src/test/java/net/wasdev/wlp/test/dev/it/DevHotTestingTest.java
new file mode 100644
index 00000000..3ed335b8
--- /dev/null
+++ b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/src/test/java/net/wasdev/wlp/test/dev/it/DevHotTestingTest.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * (c) Copyright IBM Corporation 2019.
+ *
+ * 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 net.wasdev.wlp.test.dev.it;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class DevHotTestingTest extends BaseDevTest {
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ setUpBeforeClass("-DhotTests=true", "DevHotTestingTest");
+
+ // check that dev mode has fully started
+ assertTrue(checkLogForMessage("Tests will run automatically"));
+
+ // verify that the target directory was created
+ targetDir = new File(tempProj, "target");
+ assertTrue(targetDir.exists());
+ }
+
+ @AfterClass
+ public static void cleanUpAfterClass() throws Exception {
+ BaseDevTest.cleanUpAfterClass("DevHotTestingTest");
+ }
+
+ @Test
+ public void autoTestsInvocationTest() throws Exception {
+
+ markEndOfLogFile();
+
+ testModifyJavaFile();
+
+ assertTrue(checkLogForMessage("Unit tests finished."));
+ assertTrue(checkLogForMessage("Integration tests finished."));
+ }
+
+}
diff --git a/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/src/test/java/net/wasdev/wlp/test/dev/it/DevTest.java b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/src/test/java/net/wasdev/wlp/test/dev/it/DevTest.java
new file mode 100644
index 00000000..f7bc06c8
--- /dev/null
+++ b/boost-maven/boost-maven-plugin/src/it/test-liberty-dev-mode/src/test/java/net/wasdev/wlp/test/dev/it/DevTest.java
@@ -0,0 +1,224 @@
+/*******************************************************************************
+ * (c) Copyright IBM Corporation 2019.
+ *
+ * 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 net.wasdev.wlp.test.dev.it;
+
+import static org.junit.Assert.*;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.nio.file.Files;
+import java.util.Scanner;
+
+import org.apache.maven.shared.utils.io.FileUtils;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class DevTest extends BaseDevTest {
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ setUpBeforeClass(null, "DevTest");
+
+ // check that dev mode has fully started
+ assertTrue(checkLogForMessage("Press the Enter key to run tests on demand."));
+
+ // verify that the target directory was created
+ targetDir = new File(tempProj, "target");
+ assertTrue(targetDir.exists());
+ }
+
+ @AfterClass
+ public static void cleanUpAfterClass() throws Exception {
+ BaseDevTest.cleanUpAfterClass("DevTest");
+ }
+
+ /**
+ * Test that a basic java source file change is detected
+ *
+ * @throws Exception
+ */
+ @Test
+ public void basicTest() throws Exception {
+ testModifyJavaFile();
+ }
+
+ /**
+ * Test that changes to boost properties in the pom.xml are detected
+ *
+ * @throws Exception
+ */
+ @Test
+ public void changePortPropertyTest() throws Exception {
+ markEndOfLogFile();
+
+ File targetVariablesXML = new File(targetDir,
+ "/liberty/wlp/usr/servers/defaultServer/configDropins/defaults/variables.xml");
+ assertTrue(targetVariablesXML.exists());
+
+ replaceString("9000", "9001", pom);
+
+ // check for application started message
+ assertTrue(checkLogForMessage("CWWKT0016I"));
+
+ boolean found = false;
+ Scanner scanner = new Scanner(targetVariablesXML);
+ while (scanner.hasNextLine()) {
+ String line = scanner.nextLine();
+ if (line.contains("")) {
+ found = true;
+ }
+ }
+ assertTrue("The updated boost_http_port variable was not found in the variables.xml file.", found);
+ }
+
+ /**
+ * Test that resource files are properly detected when added
+ *
+ * @throws Exception
+ */
+ @Test
+ public void resourceFileChangeTest() throws Exception {
+ markEndOfLogFile();
+
+ // make a resource file change
+ File resourceDir = new File(tempProj, "src/main/resources");
+ assertTrue(resourceDir.exists());
+
+ File propertiesFile = new File(resourceDir, "microprofile-config.properties");
+ assertTrue(propertiesFile.createNewFile());
+
+ Thread.sleep(2000); // wait for compilation
+ File targetPropertiesFile = new File(targetDir, "classes/microprofile-config.properties");
+ assertTrue(targetPropertiesFile.exists());
+ assertTrue(checkLogForMessage("CWWKZ0003I"));
+
+ // delete a resource file
+ assertTrue(propertiesFile.delete());
+ Thread.sleep(2000);
+ assertFalse(targetPropertiesFile.exists());
+ }
+
+ /**
+ * Test that test files are properly detected when created and modified
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testDirectoryTest() throws Exception {
+ // create the test directory
+ File testDir = new File(tempProj, "src/test/java");
+ assertTrue(testDir.mkdirs());
+
+ // creates a java test file
+ File unitTestSrcFile = new File(testDir, "UnitTest.java");
+ String unitTest = "import org.junit.Test;\n" + "import static org.junit.Assert.*;\n" + "\n"
+ + "public class UnitTest {\n" + "\n" + " @Test\n" + " public void testTrue() {\n"
+ + " assertTrue(true);\n" + "\n" + " }\n" + "}";
+ Files.write(unitTestSrcFile.toPath(), unitTest.getBytes());
+ assertTrue(unitTestSrcFile.exists());
+
+ Thread.sleep(2000); // wait for compilation
+ File unitTestTargetFile = new File(targetDir, "/test-classes/UnitTest.class");
+ assertTrue(unitTestTargetFile.exists());
+ long lastModified = unitTestTargetFile.lastModified();
+
+ // modify the test file
+ String str = "// testing";
+ BufferedWriter javaWriter = new BufferedWriter(new FileWriter(unitTestSrcFile, true));
+ javaWriter.append(' ');
+ javaWriter.append(str);
+
+ javaWriter.close();
+
+ Thread.sleep(5000); // wait for compilation
+ assertTrue(unitTestTargetFile.lastModified() > lastModified);
+
+ // delete the test file
+ assertTrue(unitTestSrcFile.delete());
+ Thread.sleep(2000);
+ assertFalse(unitTestTargetFile.exists());
+
+ }
+
+ /**
+ * Test to make sure tests are run when manually invoked
+ *
+ * @throws Exception
+ */
+ @Test
+ public void manualTestsInvocationTest() throws Exception {
+ markEndOfLogFile();
+
+ writer.write("\n");
+ writer.flush();
+
+ assertTrue(checkLogForMessage("Unit tests finished."));
+ assertTrue(checkLogForMessage("Integration tests finished."));
+ }
+
+ /**
+ * Test to make sure comile failures are resolved when the correct booster
+ * is added.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void resolveDependencyTest() throws Exception {
+ markEndOfLogFile();
+
+ // create the HealthCheck class, expect a compilation error
+ File systemHealthRes = new File("../resources/SystemHealth.java");
+ assertTrue(systemHealthRes.exists());
+ File systemHealthSrc = new File(tempProj, "/src/main/java/com/demo/SystemHealth.java");
+ File systemHealthTarget = new File(targetDir, "/classes/com/demo/SystemHealth.class");
+
+ FileUtils.copyFile(systemHealthRes, systemHealthSrc);
+ assertTrue(systemHealthSrc.exists());
+
+ assertTrue(checkLogForMessage("Source compilation had errors"));
+ assertFalse(systemHealthTarget.exists());
+
+ markEndOfLogFile();
+
+ // add mpHealth dependency to pom.xml
+ String mpHealthComment = "";
+ String mpHealth = "\n" + " org.microshed.boost.boosters\n"
+ + " mp-health\n" + " ";
+ replaceString(mpHealthComment, mpHealth, pom);
+
+ // Wait for boost:package to complete
+ assertTrue(checkLogForMessage("Server defaultServer package complete"));
+
+ markEndOfLogFile();
+
+ String str = "// testing";
+ BufferedWriter javaWriter = new BufferedWriter(new FileWriter(systemHealthSrc, true));
+ javaWriter.append(' ');
+ javaWriter.append(str);
+
+ javaWriter.close();
+
+ Thread.sleep(10000); // Wait until compilation is complete
+
+ assertTrue(checkLogForMessage("Source compilation was successful."));
+ assertTrue(systemHealthTarget.exists());
+
+ }
+
+}
diff --git a/boost-maven/boost-runtimes/runtime-openliberty/src/main/java/org/microshed/boost/runtimes/openliberty/LibertyRuntime.java b/boost-maven/boost-runtimes/runtime-openliberty/src/main/java/org/microshed/boost/runtimes/openliberty/LibertyRuntime.java
index 9a92073c..52cb1cda 100644
--- a/boost-maven/boost-runtimes/runtime-openliberty/src/main/java/org/microshed/boost/runtimes/openliberty/LibertyRuntime.java
+++ b/boost-maven/boost-runtimes/runtime-openliberty/src/main/java/org/microshed/boost/runtimes/openliberty/LibertyRuntime.java
@@ -20,6 +20,7 @@
import static org.twdata.maven.mojoexecutor.MojoExecutor.plugin;
import static org.twdata.maven.mojoexecutor.MojoExecutor.version;
+import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
@@ -27,6 +28,7 @@
import org.apache.maven.artifact.Artifact;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.microshed.boost.common.BoostException;
@@ -62,6 +64,8 @@ public class LibertyRuntime implements RuntimeI {
private String libertyMavenPluginArtifactId = "liberty-maven-plugin";
private String libertyMavenPluginVersion = "3.0.1";
+ private BoostLogger log;
+
public LibertyRuntime() {
this.boosterConfigs = null;
this.boostProperties = null;
@@ -71,9 +75,11 @@ public LibertyRuntime() {
this.libertyServerPath = null;
this.mavenDepPlugin = null;
this.runtimeVersion = defaultRuntimeVersion;
+ this.log = null;
}
public LibertyRuntime(RuntimeParams runtimeParams) {
+ this.log = BoostLogger.getSystemStreamLogger();
this.boosterConfigs = runtimeParams.getBoosterConfigs();
this.boostProperties = runtimeParams.getBoostProperties();
this.env = runtimeParams.getEnv();
@@ -82,7 +88,6 @@ public LibertyRuntime(RuntimeParams runtimeParams) {
this.libertyServerPath = projectBuildDir + "/liberty/wlp/usr/servers/" + serverName;
this.mavenDepPlugin = runtimeParams.getMavenDepPlugin();
this.runtimeVersion = boostProperties.getProperty("libertyRuntimeVersion", defaultRuntimeVersion);
- BoostLogger log = BoostLogger.getSystemStreamLogger();
log.info("Liberty Runtime version selected = " + runtimeVersion);
}
@@ -131,8 +136,8 @@ private void packageLiberty(List boosterConfigs) throws M
}
/**
- * Get all booster dependencies and invoke the maven-dependency-plugin to copy
- * them to the Liberty server.
+ * Get all booster dependencies and invoke the maven-dependency-plugin to
+ * copy them to the Liberty server.
*
* @throws MojoExecutionException
*
@@ -172,8 +177,13 @@ private void generateServerConfig(List boosterConfigs) th
}
/**
+<<<<<<< HEAD
* Assumes a non-WAR packaging type (like JAR) has a WAR dependency. We assume
* there's only 1 but don't check, just return the first one.
+=======
+ * Assumes a non-WAR packaging type (like JAR) has a WAR dependency. We
+ * assume there's only 1 but don't check, just return the first one.
+>>>>>>> add dev mode IT
*
* @return
* @throws BoostException
@@ -267,13 +277,22 @@ private void installMissingFeatures() throws MojoExecutionException {
*/
private void installApp(String installAppPackagesVal) throws MojoExecutionException {
- Element deployPackages = element(name("deployPackages"), installAppPackagesVal);
- Element serverNameElement = element(name("serverName"), serverName);
+ // Since the app is installed as a loose app, there is no need to
+ // re-install if
+ // the server is already running. If we do, the app will be deployed to
+ // dropins
+ // which is not what we want.
+ if (!isServerRunning()) {
+ Element deployPackages = element(name("deployPackages"), installAppPackagesVal);
+ Element serverNameElement = element(name("serverName"), serverName);
- Xpp3Dom configuration = configuration(deployPackages, serverNameElement, getRuntimeArtifactElement());
- configuration.addChild(element(name("appsDirectory"), "apps").toDom());
+ Xpp3Dom configuration = configuration(deployPackages, serverNameElement, getRuntimeArtifactElement());
+ configuration.addChild(element(name("appsDirectory"), "apps").toDom());
- executeMojo(getPlugin(), goal("deploy"), configuration, env);
+ executeMojo(getPlugin(), goal("deploy"), configuration, env);
+ } else {
+ log.info("Server is running. Skipping app re-installation.");
+ }
}
private Element getRuntimeArtifactElement() {
@@ -283,8 +302,8 @@ private Element getRuntimeArtifactElement() {
}
/**
- * Invoke the liberty-maven-plugin to package the server into a runnable Liberty
- * JAR
+ * Invoke the liberty-maven-plugin to package the server into a runnable
+ * Liberty JAR
*/
private void createUberJar() throws MojoExecutionException {
executeMojo(getPlugin(), goal("package"),
@@ -339,4 +358,8 @@ public void doStop() throws BoostException {
}
}
+ private boolean isServerRunning() {
+ return new File(libertyServerPath + "/workarea/.sRunning").exists();
+ }
+
}