diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 24d837339..2a7ef64eb 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -48,8 +48,9 @@ jobs:
- name: Checkout ci.common
uses: actions/checkout@v3
with:
- repository: OpenLiberty/ci.common
+ repository: arunvenmany-ibm/ci.common
path: ci.common
+ ref: server_multi_restart_issue_fix
- name: Checkout ci.ant
uses: actions/checkout@v3
with:
@@ -102,7 +103,7 @@ jobs:
- name: Clone ci.ant, ci.common, ci.maven repos to C drive
run: |
cp -r D:/a/ci.maven/ci.maven C:/ci.maven
- git clone https://github.com/OpenLiberty/ci.common.git C:/ci.common
+ git clone https://github.com/arunvenmany-ibm/ci.common.git --branch server_multi_restart_issue_fix --single-branch C:/ci.common
git clone https://github.com/OpenLiberty/ci.ant.git C:/ci.ant
- name: Set up Maven
uses: stCarolas/setup-maven@v4.5
diff --git a/liberty-maven-plugin/pom.xml b/liberty-maven-plugin/pom.xml
index b7912546f..0f642c1cc 100644
--- a/liberty-maven-plugin/pom.xml
+++ b/liberty-maven-plugin/pom.xml
@@ -88,7 +88,7 @@
io.openliberty.tools
ci.common
- 1.8.36
+ 1.8.37-SNAPSHOT
org.twdata.maven
diff --git a/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/DevGenerateFeaturesDependenciesTest.java b/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/DevGenerateFeaturesDependenciesTest.java
index e817f2e04..0a6fcf325 100644
--- a/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/DevGenerateFeaturesDependenciesTest.java
+++ b/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/DevGenerateFeaturesDependenciesTest.java
@@ -56,7 +56,7 @@ public void updateDependencyTest() throws Exception {
assertTrue(verifyLogMessageExists("mpHealth-2.2", 10000)); // should appear in the message "CWWKF0012I: The server installed the following features:"
int generateFeaturesCount = countOccurrences("Running liberty:generate-features", logFile);
- assertTrue(verifyLogMessageExists("Source compilation was successful.", 10000));
+ assertTrue(verifyLogMessageExists("Recompile dev-sample-proj due to an earlier compilation error", 10000));
// modify MicroProfile umbrella dependency in pom.xml
replaceString("\n"
diff --git a/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/MultiModuleUpdatePomsTest.java b/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/MultiModuleUpdatePomsTest.java
index be9d05d09..285a9980c 100644
--- a/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/MultiModuleUpdatePomsTest.java
+++ b/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/MultiModuleUpdatePomsTest.java
@@ -47,6 +47,11 @@ public void updatePomsTest() throws Exception {
// Wait until the last module (ear) finishes compiling during dev mode startup
// TODO: this can be removed if dev mode does not recompile after first starting up
verifyLogMessageExists("guide-maven-multimodules-ear tests compilation was successful", 10000);
+ // verify that generated-features.xml file exists
+ File newFeatureFile = getGeneratedFeaturesFile("ear");
+ assertTrue(getLogTail(), verifyFileExists(newFeatureFile, 1000));
+ long newFeatureFileLastModified = newFeatureFile.lastModified();
+ waitLongEnough();
int jarSourceCount = countOccurrences("guide-maven-multimodules-jar source compilation was successful.", logFile);
int jarTestsCount = countOccurrences("guide-maven-multimodules-jar tests compilation was successful.", logFile);
@@ -54,12 +59,6 @@ public void updatePomsTest() throws Exception {
int warTestsCount = countOccurrences("guide-maven-multimodules-war tests compilation was successful.", logFile);
int earTestsCount = countOccurrences("guide-maven-multimodules-ear tests compilation was successful.", logFile);
- // verify that generated-features.xml file exists
- File newFeatureFile = getGeneratedFeaturesFile("ear");
- assertTrue(getLogTail(), verifyFileExists(newFeatureFile, 1000));
- long newFeatureFileLastModified = newFeatureFile.lastModified();
- waitLongEnough();
-
touchFileTwice("jar/pom.xml");
// Give time for recompile to occur
diff --git a/liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/server/DevMojo.java b/liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/server/DevMojo.java
index 709ddaf88..d8e4015f9 100644
--- a/liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/server/DevMojo.java
+++ b/liberty-maven-plugin/src/main/java/io/openliberty/tools/maven/server/DevMojo.java
@@ -311,6 +311,7 @@ public void setKeepTempDockerfile(Boolean keepTempDockerfile) {
private boolean isExplodedLooseWarApp = false;
private boolean isNewInstallation = true;
+ private static Map compileMojoError = new HashMap<>();
/**
* Set the container option.
@@ -359,7 +360,7 @@ public DevMojoUtil(File installDir, File userDir, File serverDirectory, File sou
((long) (compileWait * 1000L)), libertyDebug, false, false, pollingTest, container, containerfile,
containerBuildContext, containerRunOpts, containerBuildTimeout, skipDefaultPorts, compilerOptions,
keepTempContainerfile, mavenCacheLocation, upstreamProjects, recompileDeps, project.getPackaging(),
- pom, parentPoms, generateFeatures, compileArtifactPaths, testArtifactPaths, webResourceDirs);
+ pom, parentPoms, generateFeatures, compileArtifactPaths, testArtifactPaths, webResourceDirs, compileMojoError);
this.libertyDirPropertyFiles = LibertyPropFilesUtility.getLibertyDirectoryPropertyFiles(new CommonLogger(getLog()), installDir, userDir,
serverDirectory);
@@ -492,7 +493,7 @@ public void libertyDeploy() throws PluginExecutionException {
@Override
public void stopServer() {
super.serverFullyStarted.set(false);
-
+ compileMojoError.clear();
if (container) {
// TODO stop the container instead
return;
@@ -1355,7 +1356,6 @@ private void doDevMode() throws MojoExecutionException {
if (project.getPackaging().equals("ear")) {
isEar = true;
}
-
// If there are downstream projects (e.g. other modules depend on this module in the Maven Reactor build order),
// then skip dev mode on this module but only run compile.
List upstreamMavenProjects = new ArrayList();
@@ -1386,7 +1386,19 @@ private void doDevMode() throws MojoExecutionException {
getLog().debug("Skipping compile/resources on module with pom packaging type");
} else {
runMojo("org.apache.maven.plugins", "maven-resources-plugin", "resources");
- runCompileMojoLogWarning();
+ try {
+ runCompileMojoLogWarningWithException("compile");
+ } catch (MojoExecutionException e) {
+ // set init recompile necessary in case any module fail
+ compileMojoError.put(project.getName(),Boolean.TRUE);
+ }
+ if(hotTests) {
+ try {
+ runCompileMojoLogWarningWithException("testCompile");
+ } catch (MojoExecutionException e) {
+ compileMojoError.put(project.getName(),Boolean.TRUE);
+ }
+ }
}
return;
} else {
@@ -1456,13 +1468,27 @@ private void doDevMode() throws MojoExecutionException {
if (isEar) {
runMojo("org.apache.maven.plugins", "maven-ear-plugin", "generate-application-xml");
runMojo("org.apache.maven.plugins", "maven-resources-plugin", "resources");
+ // for test classes in ear
+ try {
+ runCompileMojoLogWarningWithException("testCompile");
+ } catch (MojoExecutionException e) {
+ compileMojoError.put(project.getName(),Boolean.TRUE);
+ }
} else if (project.getPackaging().equals("pom")) {
getLog().debug("Skipping compile/resources on module with pom packaging type");
} else {
runMojo("org.apache.maven.plugins", "maven-resources-plugin", "resources");
- runCompileMojoLogWarning();
- runMojo("org.apache.maven.plugins", "maven-resources-plugin", "testResources");
- runTestCompileMojoLogWarning();
+ try {
+ runCompileMojoLogWarningWithException("compile");
+ } catch (MojoExecutionException e) {
+ compileMojoError.put(project.getName(),Boolean.TRUE);
+ }
+ runMojo("org.apache.maven.plugins", "maven-resources-plugin", "testResources");
+ try {
+ runCompileMojoLogWarningWithException("testCompile");
+ } catch (MojoExecutionException e) {
+ compileMojoError.put(project.getName(),Boolean.TRUE);
+ }
}
sourceDirectory = new File(sourceDirectoryString.trim());
@@ -2024,6 +2050,20 @@ private void runCompileMojo(String goal, MavenProject mavenProject) throws MojoE
executeMojo(plugin, goal(goal), config, executionEnvironment(tempProject, tempSession, pluginManager));
}
+ private void runCompileMojoLogWarningWithException(String goal) throws MojoExecutionException {
+ Plugin plugin = getPluginForProject("org.apache.maven.plugins", "maven-compiler-plugin", project);
+ MavenSession tempSession = session.clone();
+ tempSession.setCurrentProject(project);
+ MavenProject tempProject = project;
+ Xpp3Dom config = ExecuteMojoUtil.getPluginGoalConfig(plugin, goal, getLog());
+ config = Xpp3Dom.mergeXpp3Dom(configuration(element(name("failOnError"), "true")), config);
+ getLog().info("Running maven-compiler-plugin:" + goal + " on " + tempProject.getFile());
+ getLog().debug("configuration:\n" + config);
+ executeMojo(plugin, goal(goal), config, executionEnvironment(tempProject, tempSession, pluginManager));
+
+ updateArtifactPathToOutputDirectory(project);
+ }
+
/**
* Executes maven:compile but logs errors as warning messages
*