diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginValidationManager.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginValidationManager.java index 655535c581ae..818509c1b31a 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginValidationManager.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginValidationManager.java @@ -22,6 +22,8 @@ import javax.inject.Singleton; import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -251,16 +253,12 @@ private String pluginDeclaration(MavenSession mavenSession, MojoDescriptor mojoD if (location.contains("://")) { stringBuilder.append(" (").append(location).append(")"); } else { - File rootBasedir = mavenSession.getTopLevelProject().getBasedir(); - File locationFile = new File(location); - if (location.startsWith(rootBasedir.getPath())) { - stringBuilder - .append(" (") - .append(rootBasedir.toPath().relativize(locationFile.toPath())) - .append(")"); - } else { - stringBuilder.append(" (").append(location).append(")"); + Path topDirectory = mavenSession.getTopDirectory(); + Path locationPath = Paths.get(location).toAbsolutePath().normalize(); + if (locationPath.startsWith(topDirectory)) { + locationPath = topDirectory.relativize(locationPath); } + stringBuilder.append(" (").append(locationPath).append(")"); } } stringBuilder.append(" @ line ").append(inputLocation.getLineNumber()); @@ -275,8 +273,12 @@ private String pluginOccurrence(MavenSession mavenSession) { String result = prj.getGroupId() + ":" + prj.getArtifactId() + ":" + prj.getVersion(); File currentPom = prj.getFile(); if (currentPom != null) { - File rootBasedir = mavenSession.getTopLevelProject().getBasedir(); - result += " (" + rootBasedir.toPath().relativize(currentPom.toPath()) + ")"; + Path topDirectory = mavenSession.getTopDirectory(); + Path current = currentPom.toPath().toAbsolutePath().normalize(); + if (current.startsWith(topDirectory)) { + current = topDirectory.relativize(current); + } + result += " (" + current + ")"; } return result; } diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java b/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java index ca5554339fb2..ae591850be57 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java @@ -19,6 +19,7 @@ package org.apache.maven.cli.event; import java.io.File; +import java.nio.file.Path; import java.util.List; import java.util.Objects; @@ -336,8 +337,12 @@ public void projectStarted(ExecutionEvent event) { File currentPom = project.getFile(); if (currentPom != null) { MavenSession session = event.getSession(); - File rootBasedir = session.getTopLevelProject().getBasedir(); - logger.info(" from " + rootBasedir.toPath().relativize(currentPom.toPath())); + Path topDirectory = session.getTopDirectory(); + Path current = currentPom.toPath().toAbsolutePath().normalize(); + if (current.startsWith(topDirectory)) { + current = topDirectory.relativize(current); + } + logger.info(" from " + current); } // ----------[ packaging ]---------- diff --git a/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java b/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java index 7e830f45c97c..59b8dc282a0f 100644 --- a/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java +++ b/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java @@ -80,6 +80,7 @@ void testProjectStarted() { when(rootProject.getBasedir()).thenReturn(basedir); MavenSession session = mock(MavenSession.class); when(session.getTopLevelProject()).thenReturn(rootProject); + when(session.getTopDirectory()).thenReturn(basedir.toPath()); when(event.getSession()).thenReturn(session); // execute @@ -112,6 +113,7 @@ void testProjectStartedOverflow() { MavenSession session = mock(MavenSession.class); when(session.getTopLevelProject()).thenReturn(project); when(event.getSession()).thenReturn(session); + when(session.getTopDirectory()).thenReturn(basedir.toPath()); // execute executionEventLogger.projectStarted(event);