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 *