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..4dfc06f2b 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 skipped for dev-sample-proj since earlier compilation is successful", 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/DevHotTestingTest.java b/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/DevHotTestingTest.java index 3a7c18317..821c56507 100644 --- a/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/DevHotTestingTest.java +++ b/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/DevHotTestingTest.java @@ -34,6 +34,7 @@ public static void cleanUpAfterClass() throws Exception { @Test public void autoTestsInvocationTest() throws Exception { + assertTrue(verifyLogMessageExists("Recompile skipped for dev-sample-proj since earlier compilation is successful", 20000)); assertTrue(verifyLogMessageExists("Tests will run automatically", 20000)); testModifyJavaFile(); diff --git a/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/MultiModuleTypeA3Test.java b/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/MultiModuleTypeA3Test.java index 2a04908fa..0c90ca293 100644 --- a/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/MultiModuleTypeA3Test.java +++ b/liberty-maven-plugin/src/it/dev-it/src/test/java/net/wasdev/wlp/test/dev/it/MultiModuleTypeA3Test.java @@ -46,6 +46,9 @@ public void runTest() throws Exception { File targetEarClass = new File(tempProj, "ear/target/test-classes/it/io/openliberty/guides/multimodules/ConverterAppIT.class"); assertFalse(targetEarClass.exists()); + assertTrue(verifyLogMessageExists( + "Recompile guide-maven-multimodules-ear due to an earlier compilation error", + 20000)); // add a dependency to parent pom and check that it resolves compile errors in // child modules 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 b0255d578..45c35d65f 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()); @@ -2025,6 +2051,21 @@ 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); + goal = goal + "#" + getExecutionId(goal, plugin); + 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 *