You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2024/12/31 01:17:40 UTC

(maven-artifact-plugin) branch master updated (1a30172 -> 5befda6)

This is an automated email from the ASF dual-hosted git repository.

hboutemy pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/maven-artifact-plugin.git


    from 1a30172  Bump commons-codec:commons-codec from 1.17.0 to 1.17.1
     new ed77bd7  [MARTIFACT-78] diagnose reactor root and first
     new 5befda6  [MARTIFACT-78] diagnose parent(s) in reactor

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/it/describe-multi/{ => parent}/pom.xml         | 17 ++-----
 src/it/describe-multi/pom.xml                      | 30 ++----------
 .../artifact/buildinfo/AbstractBuildinfoMojo.java  | 57 ++++++++++++----------
 .../artifact/buildinfo/CheckBuildPlanMojo.java     |  4 +-
 .../plugins/artifact/buildinfo/CompareMojo.java    |  4 +-
 .../buildinfo/DescribeBuildOutputMojo.java         | 25 +++++++++-
 6 files changed, 67 insertions(+), 70 deletions(-)
 copy src/it/describe-multi/{ => parent}/pom.xml (83%)


(maven-artifact-plugin) 02/02: [MARTIFACT-78] diagnose parent(s) in reactor

Posted by hb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hboutemy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-artifact-plugin.git

commit 5befda6fc040a633f9b58163372b5925b8eb3726
Author: Hervé Boutemy <hb...@apache.org>
AuthorDate: Tue Dec 31 02:13:42 2024 +0100

    [MARTIFACT-78] diagnose parent(s) in reactor
---
 src/it/describe-multi/{ => parent}/pom.xml         | 17 +++---------
 src/it/describe-multi/pom.xml                      | 30 ++++------------------
 .../artifact/buildinfo/AbstractBuildinfoMojo.java  | 21 ++++++++++-----
 .../buildinfo/DescribeBuildOutputMojo.java         | 21 +++++++++++++++
 4 files changed, 44 insertions(+), 45 deletions(-)

diff --git a/src/it/describe-multi/pom.xml b/src/it/describe-multi/parent/pom.xml
similarity index 83%
copy from src/it/describe-multi/pom.xml
copy to src/it/describe-multi/parent/pom.xml
index ca54fbb..81fd8fd 100644
--- a/src/it/describe-multi/pom.xml
+++ b/src/it/describe-multi/parent/pom.xml
@@ -24,30 +24,21 @@
     <groupId>org.apache.maven</groupId>
     <artifactId>maven-parent</artifactId>
     <version>39</version>
+    <relativePath></relativePath>
   </parent>
 
   <groupId>org.apache.maven.plugins.it</groupId>
-  <artifactId>multi</artifactId>
+  <artifactId>parent</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
-  <description>An IT verifying the use case of buildinfo file for multi-modules build.</description>
-
-  <prerequisites>
-    <maven>3.0.5</maven>
-  </prerequisites>
-
-  <modules>
-    <module>modB</module>
-    <module>modA</module>
-    <module>modA-other-groupId</module>
-    <module>modSkipDeploy</module>
-  </modules>
+  <description>Parent POM.</description>
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <project.build.outputTimestamp>1234567890</project.build.outputTimestamp>
     <spotless.check.skip>true</spotless.check.skip>
+    <checkstyle.skip>true</checkstyle.skip>
   </properties>
 
   <build>
diff --git a/src/it/describe-multi/pom.xml b/src/it/describe-multi/pom.xml
index ca54fbb..adf850c 100644
--- a/src/it/describe-multi/pom.xml
+++ b/src/it/describe-multi/pom.xml
@@ -21,42 +21,22 @@
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
-    <groupId>org.apache.maven</groupId>
-    <artifactId>maven-parent</artifactId>
-    <version>39</version>
+    <groupId>org.apache.maven.plugins.it</groupId>
+    <artifactId>parent</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <relativePath>parent/</relativePath>
   </parent>
 
-  <groupId>org.apache.maven.plugins.it</groupId>
   <artifactId>multi</artifactId>
-  <version>1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <description>An IT verifying the use case of buildinfo file for multi-modules build.</description>
 
-  <prerequisites>
-    <maven>3.0.5</maven>
-  </prerequisites>
-
   <modules>
     <module>modB</module>
     <module>modA</module>
     <module>modA-other-groupId</module>
     <module>modSkipDeploy</module>
+    <module>parent</module>
   </modules>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <project.build.outputTimestamp>1234567890</project.build.outputTimestamp>
-    <spotless.check.skip>true</spotless.check.skip>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>@project.groupId@</groupId>
-        <artifactId>@project.artifactId@</artifactId>
-        <version>@project.version@</version>
-      </plugin>
-    </plugins>
-  </build>
 </project>
diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java
index e108083..d126cf1 100644
--- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java
+++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java
@@ -229,13 +229,20 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo {
     static void diagnose(
             String outputTimestamp, Log log, MavenProject project, MavenSession session, String effective) {
         if (session.getProjects().size() > 1) {
-            log.info("reactor executionRoot = " + session.getTopLevelProject().getId());
-            log.info("reactor first = " + session.getProjects().get(0).getId());
-            MavenProject parent = session.getProjects().get(0).getParent();
-            log.info("reactor first parent = " + ((parent == null) ? parent : parent.getId()));
-            if (parent != null && session.getProjects().contains(parent)) {
+            MavenProject root = session.getTopLevelProject();
+            MavenProject first = session.getProjects().get(0);
+            Path firstRelative =
+                    root.getBasedir().toPath().relativize(first.getFile().toPath());
+            MavenProject firstParent = first.getParent();
+            log.info("reactor executionRoot = " + root.getId() + (root.equals(project) ? " (current)" : "")
+                    + System.lineSeparator()
+                    + "       reactor first = "
+                    + (first.equals(root) ? "executionRoot" : (first.getId() + " @ " + firstRelative))
+                    + System.lineSeparator()
+                    + "               first.parent = " + ((firstParent == null) ? firstParent : firstParent.getId()));
+            if (firstParent != null && session.getProjects().contains(firstParent)) {
                 // should not happen...
-                log.warn("reactor first parent = " + parent.getId() + " is in reactor");
+                log.warn("reactor first parent = " + firstParent.getId() + " is in reactor");
             }
         }
 
@@ -263,7 +270,7 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo {
 
         MavenProject parent = project.getParent();
         if (parent != null) {
-            StringBuilder sb = new StringBuilder("Inheritance analysis property:" + System.lineSeparator()
+            StringBuilder sb = new StringBuilder("Inheritance analysis for property:" + System.lineSeparator()
                     + "        - current " + project.getId() + " property = " + projectProperty);
             while (parent != null) {
                 String parentProperty = parent.getProperties().getProperty("project.build.outputTimestamp");
diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/DescribeBuildOutputMojo.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/DescribeBuildOutputMojo.java
index a1d1c5f..bc316cb 100644
--- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/DescribeBuildOutputMojo.java
+++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/DescribeBuildOutputMojo.java
@@ -84,6 +84,19 @@ public class DescribeBuildOutputMojo extends AbstractBuildinfoMojo {
         rootPath = session.getTopLevelProject().getBasedir().toPath();
         bi = newBuildInfoWriter(null, false);
 
+        Map<MavenProject, Long> reactorParents = session.getProjects().stream()
+                .collect(Collectors.groupingBy(
+                        p -> DescribeBuildOutputMojo.getReactorParent(session, p), Collectors.counting()));
+        reactorParents.entrySet().stream()
+                .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
+                .forEach(e -> getLog().info("parent in reactor: " + e.getKey().getGroupId() + ":"
+                        + e.getKey().getArtifactId() + " @ "
+                        + rootPath.relativize(e.getKey().getFile().toPath()) + " (" + e.getValue() + " module"
+                        + ((e.getValue() > 1) ? "s" : "") + "), property = "
+                        + e.getKey().getProperties().get("project.build.outputTimestamp")));
+
+        getLog().info("");
+
         Map<String, Long> groupIds = session.getProjects().stream()
                 .collect(Collectors.groupingBy(MavenProject::getGroupId, Collectors.counting()));
         groupIds.entrySet().stream()
@@ -196,6 +209,14 @@ public class DescribeBuildOutputMojo extends AbstractBuildinfoMojo {
         }
     }
 
+    static MavenProject getReactorParent(MavenSession session, MavenProject project) {
+        MavenProject reactorParent = project;
+        while (session.getProjects().contains(reactorParent.getParent())) {
+            reactorParent = reactorParent.getParent();
+        }
+        return reactorParent;
+    }
+
     @Override
     public void execute(Map<org.eclipse.aether.artifact.Artifact, String> artifacts) throws MojoExecutionException {
         // buildinfo generation skipped, method not called


(maven-artifact-plugin) 01/02: [MARTIFACT-78] diagnose reactor root and first

Posted by hb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hboutemy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-artifact-plugin.git

commit ed77bd741163ec953030db1fc2309fafcda12bb5
Author: Hervé Boutemy <hb...@apache.org>
AuthorDate: Sun Dec 22 00:03:29 2024 +0100

    [MARTIFACT-78] diagnose reactor root and first
---
 .../artifact/buildinfo/AbstractBuildinfoMojo.java  | 48 +++++++++++-----------
 .../artifact/buildinfo/CheckBuildPlanMojo.java     |  4 +-
 .../plugins/artifact/buildinfo/CompareMojo.java    |  4 +-
 .../buildinfo/DescribeBuildOutputMojo.java         |  4 +-
 4 files changed, 29 insertions(+), 31 deletions(-)

diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java
index 51b0e0e..e108083 100644
--- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java
+++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java
@@ -153,7 +153,7 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo {
     public void execute() throws MojoExecutionException {
         boolean mono = session.getProjects().size() == 1;
 
-        hasBadOutputTimestamp(outputTimestamp, getLog(), project, session.getProjects(), diagnose);
+        hasBadOutputTimestamp(outputTimestamp, getLog(), project, session, diagnose);
 
         if (!mono) {
             // if module skips install and/or deploy
@@ -179,17 +179,13 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo {
     }
 
     static boolean hasBadOutputTimestamp(
-            String outputTimestamp,
-            Log log,
-            MavenProject project,
-            List<MavenProject> reactorProjects,
-            boolean diagnose) {
+            String outputTimestamp, Log log, MavenProject project, MavenSession session, boolean diagnose) {
         Instant timestamp =
                 MavenArchiver.parseBuildOutputTimestamp(outputTimestamp).orElse(null);
         String effective = ((timestamp == null) ? "disabled" : DateTimeFormatter.ISO_INSTANT.format(timestamp));
 
         if (diagnose) {
-            diagnose(outputTimestamp, log, project, reactorProjects, effective);
+            diagnose(outputTimestamp, log, project, session, effective);
         }
 
         if (timestamp == null) {
@@ -215,7 +211,7 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo {
         // check if timestamp defined in a project from reactor: info if it is not the case
         boolean parentInReactor = false;
         MavenProject reactorParent = project;
-        while (reactorProjects.contains(reactorParent.getParent())) {
+        while (session.getProjects().contains(reactorParent.getParent())) {
             parentInReactor = true;
             reactorParent = reactorParent.getParent();
         }
@@ -231,11 +227,18 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo {
     }
 
     static void diagnose(
-            String outputTimestamp,
-            Log log,
-            MavenProject project,
-            List<MavenProject> reactorProjects,
-            String effective) {
+            String outputTimestamp, Log log, MavenProject project, MavenSession session, String effective) {
+        if (session.getProjects().size() > 1) {
+            log.info("reactor executionRoot = " + session.getTopLevelProject().getId());
+            log.info("reactor first = " + session.getProjects().get(0).getId());
+            MavenProject parent = session.getProjects().get(0).getParent();
+            log.info("reactor first parent = " + ((parent == null) ? parent : parent.getId()));
+            if (parent != null && session.getProjects().contains(parent)) {
+                // should not happen...
+                log.warn("reactor first parent = " + parent.getId() + " is in reactor");
+            }
+        }
+
         log.info("outputTimestamp = " + outputTimestamp
                 + (effective.equals(outputTimestamp) ? "" : (" => " + effective)));
 
@@ -254,6 +257,10 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo {
                 + "        - project.build.outputTimestamp property from project original model = "
                 + originalModelProperty);
 
+        if (outputTimestamp == null) {
+            return;
+        }
+
         MavenProject parent = project.getParent();
         if (parent != null) {
             StringBuilder sb = new StringBuilder("Inheritance analysis property:" + System.lineSeparator()
@@ -261,7 +268,7 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo {
             while (parent != null) {
                 String parentProperty = parent.getProperties().getProperty("project.build.outputTimestamp");
                 sb.append(System.lineSeparator());
-                sb.append("        - " + (reactorProjects.contains(parent) ? "reactor" : "external") + " parent "
+                sb.append("        - " + (session.getProjects().contains(parent) ? "reactor" : "external") + " parent "
                         + parent.getId() + " property = " + parentProperty);
                 if (!projectProperty.equals(parentProperty)) {
                     break;
@@ -291,7 +298,7 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo {
         }
 
         // copy aggregate file to root target directory
-        MavenProject root = getExecutionRoot();
+        MavenProject root = session.getTopLevelProject();
         String extension = aggregate.getName().substring(aggregate.getName().lastIndexOf('.'));
         File rootCopy =
                 new File(root.getBuild().getDirectory(), root.getArtifactId() + '-' + root.getVersion() + extension);
@@ -325,7 +332,7 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo {
      * @throws MojoExecutionException if anything goes wrong
      */
     protected Map<Artifact, String> generateBuildinfo(boolean mono) throws MojoExecutionException {
-        MavenProject root = mono ? project : getExecutionRoot();
+        MavenProject root = mono ? project : session.getTopLevelProject();
 
         buildinfoFile.getParentFile().mkdirs();
 
@@ -355,15 +362,6 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo {
         }
     }
 
-    protected MavenProject getExecutionRoot() {
-        for (MavenProject p : session.getAllProjects()) {
-            if (p.isExecutionRoot()) {
-                return p;
-            }
-        }
-        return null;
-    }
-
     private MavenProject getLastProject() {
         int i = session.getProjects().size();
         while (i > 0) {
diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CheckBuildPlanMojo.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CheckBuildPlanMojo.java
index 00a2fab..fc7eca7 100644
--- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CheckBuildPlanMojo.java
+++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CheckBuildPlanMojo.java
@@ -108,8 +108,8 @@ public class CheckBuildPlanMojo extends AbstractMojo {
 
     @Override
     public void execute() throws MojoExecutionException {
-        boolean fail = AbstractBuildinfoMojo.hasBadOutputTimestamp(
-                outputTimestamp, getLog(), project, session.getProjects(), diagnose);
+        boolean fail =
+                AbstractBuildinfoMojo.hasBadOutputTimestamp(outputTimestamp, getLog(), project, session, diagnose);
 
         // TODO check maven-jar-plugin module-info.class?
 
diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CompareMojo.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CompareMojo.java
index b7a4277..bda4391 100644
--- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CompareMojo.java
+++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CompareMojo.java
@@ -137,7 +137,7 @@ public class CompareMojo extends AbstractBuildinfoMojo {
      * @throws MojoExecutionException if anything goes wrong
      */
     private void checkAgainstReference(Map<Artifact, String> artifacts, boolean mono) throws MojoExecutionException {
-        MavenProject root = mono ? project : getExecutionRoot();
+        MavenProject root = mono ? project : session.getTopLevelProject();
         File referenceDir = new File(root.getBuild().getDirectory(), "reference");
         referenceDir.mkdirs();
 
@@ -301,7 +301,7 @@ public class CompareMojo extends AbstractBuildinfoMojo {
     }
 
     private String relative(File file) {
-        File basedir = getExecutionRoot().getBasedir();
+        File basedir = session.getTopLevelProject().getBasedir();
         int length = basedir.getPath().length();
         String path = file.getPath();
         return path.substring(length + 1);
diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/DescribeBuildOutputMojo.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/DescribeBuildOutputMojo.java
index ae7362f..a1d1c5f 100644
--- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/DescribeBuildOutputMojo.java
+++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/DescribeBuildOutputMojo.java
@@ -72,7 +72,7 @@ public class DescribeBuildOutputMojo extends AbstractBuildinfoMojo {
                 MavenArchiver.parseBuildOutputTimestamp(outputTimestamp).orElse(null);
         String effective = ((timestamp == null) ? "disabled" : DateTimeFormatter.ISO_INSTANT.format(timestamp));
 
-        diagnose(outputTimestamp, getLog(), project, session.getProjects(), effective);
+        diagnose(outputTimestamp, getLog(), project, session, effective);
         getLog().info("");
         describeBuildOutput();
     }
@@ -81,7 +81,7 @@ public class DescribeBuildOutputMojo extends AbstractBuildinfoMojo {
     private BuildInfoWriter bi;
 
     private void describeBuildOutput() throws MojoExecutionException {
-        rootPath = getExecutionRoot().getBasedir().toPath();
+        rootPath = session.getTopLevelProject().getBasedir().toPath();
         bi = newBuildInfoWriter(null, false);
 
         Map<String, Long> groupIds = session.getProjects().stream()