From b2953c52d5019213e55d6031fcec132707a2ef3e Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 1 Jun 2023 19:05:48 +0200 Subject: [PATCH] [MNG-7795] IllegalArgumentException: 'other' has different root during plugin validation (#1133) Checks the paths before relativizing them. Normalize and relative before adding to result Rename local vars Apply to ExecutionEventLogger --- https://issues.apache.org/jira/browse/MNG-7795 Co-authored-by: Andreas Dangel --- .../DefaultPluginValidationManager.java | 24 ++++++++++--------- .../maven/cli/event/ExecutionEventLogger.java | 9 +++++-- .../cli/event/ExecutionEventLoggerTest.java | 2 ++ 3 files changed, 22 insertions(+), 13 deletions(-) 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 bf4122fa25..736cd77b1d 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.Named; 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; @@ -261,16 +263,12 @@ public final class DefaultPluginValidationManager extends AbstractEventSpy imple 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()); @@ -285,8 +283,12 @@ public final class DefaultPluginValidationManager extends AbstractEventSpy imple 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 ca5554339f..ae591850be 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 class ExecutionEventLogger extends AbstractExecutionListener { 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 7e830f45c9..59b8dc282a 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 @@ class ExecutionEventLoggerTest { 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 @@ class ExecutionEventLoggerTest { 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);