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 @@ protected AbstractBuildinfoMojo( 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 void execute() throws MojoExecutionException { } static boolean hasBadOutputTimestamp( - String outputTimestamp, - Log log, - MavenProject project, - List 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 @@ static boolean hasBadOutputTimestamp( // 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 @@ static boolean hasBadOutputTimestamp( } static void diagnose( - String outputTimestamp, - Log log, - MavenProject project, - List 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 @@ static void diagnose( + " - 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 @@ static void diagnose( 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 @@ protected void copyAggregateToRoot(File aggregate) throws MojoExecutionException } // 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 @@ protected BuildInfoWriter newBuildInfoWriter(PrintWriter p, boolean mono) { * @throws MojoExecutionException if anything goes wrong */ protected Map generateBuildinfo(boolean mono) throws MojoExecutionException { - MavenProject root = mono ? project : getExecutionRoot(); + MavenProject root = mono ? project : session.getTopLevelProject(); buildinfoFile.getParentFile().mkdirs(); @@ -355,15 +362,6 @@ protected Map generateBuildinfo(boolean mono) throws MojoExecu } } - 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 @@ protected MavenExecutionPlan calculateExecutionPlan() throws MojoExecutionExcept @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 @@ protected void skip(MavenProject last) throws MojoExecutionException { * @throws MojoExecutionException if anything goes wrong */ private void checkAgainstReference(Map 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 @@ private String getRepositoryFilename(Artifact a) { } 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 void execute() throws MojoExecutionException { 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 void execute() throws MojoExecutionException { private BuildInfoWriter bi; private void describeBuildOutput() throws MojoExecutionException { - rootPath = getExecutionRoot().getBasedir().toPath(); + rootPath = session.getTopLevelProject().getBasedir().toPath(); bi = newBuildInfoWriter(null, false); Map groupIds = session.getProjects().stream()