From c154f0f148e6cc157b46efb3c0d98e306d942a2d Mon Sep 17 00:00:00 2001 From: tomred-net Date: Mon, 3 Jul 2023 20:22:45 +1200 Subject: [PATCH] Fix #358, #352 NPE on site generation caused by null returned by deprecated MavenProject.getDependencyArtifacts() (#373) Co-authored-by: Dermot Butterfield Co-authored-by: Slawomir Jaranowski --- src/it/ISSUE-358/child-1/pom.xml | 11 +++++ src/it/ISSUE-358/invoker.properties | 1 + src/it/ISSUE-358/pom.xml | 44 +++++++++++++++++++ .../license/AbstractThirdPartyReportMojo.java | 4 +- .../mojo/license/AddThirdPartyMojo.java | 5 ++- .../AggregateDownloadLicensesMojo.java | 3 +- .../mojo/license/DownloadLicensesMojo.java | 3 +- .../LicensesXmlInsertVersionsMojo.java | 3 +- .../mojo/license/utils/MojoHelper.java | 26 +++++++++++ 9 files changed, 93 insertions(+), 7 deletions(-) create mode 100755 src/it/ISSUE-358/child-1/pom.xml create mode 100755 src/it/ISSUE-358/invoker.properties create mode 100755 src/it/ISSUE-358/pom.xml diff --git a/src/it/ISSUE-358/child-1/pom.xml b/src/it/ISSUE-358/child-1/pom.xml new file mode 100755 index 000000000..eba09b602 --- /dev/null +++ b/src/it/ISSUE-358/child-1/pom.xml @@ -0,0 +1,11 @@ + + 4.0.0 + + net.tomred + ISSUE-358 + 0.0.1-SNAPSHOT + + child-1 + diff --git a/src/it/ISSUE-358/invoker.properties b/src/it/ISSUE-358/invoker.properties new file mode 100755 index 000000000..ed68a8b63 --- /dev/null +++ b/src/it/ISSUE-358/invoker.properties @@ -0,0 +1 @@ +invoker.goals=clean site diff --git a/src/it/ISSUE-358/pom.xml b/src/it/ISSUE-358/pom.xml new file mode 100755 index 000000000..476bebd6a --- /dev/null +++ b/src/it/ISSUE-358/pom.xml @@ -0,0 +1,44 @@ + + 4.0.0 + net.tomred + ISSUE-358 + 0.0.1-SNAPSHOT + + pom + + + child-1 + + + + + + org.codehaus.mojo + license-maven-plugin + @project.version@ + + + org.apache.maven.plugins + maven-site-plugin + @maven-site-plugin.version@ + + + org.apache.maven.plugins + maven-project-info-reports-plugin + @maven-project-info-reports-plugin.version@ + + + + + + + + org.codehaus.mojo + license-maven-plugin + @project.version@ + + + + diff --git a/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java b/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java index 9ee1082f0..2ee510c01 100644 --- a/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java @@ -482,10 +482,10 @@ Collection createThirdPartyDetails(MavenProject project, bool ResolvedProjectDependencies loadedDependencies; if (loadArtifacts) { loadedDependencies = - new ResolvedProjectDependencies(project.getArtifacts(), project.getDependencyArtifacts()); + new ResolvedProjectDependencies(project.getArtifacts(), MojoHelper.getDependencyArtifacts(project)); } else { loadedDependencies = new ResolvedProjectDependencies( - getProject().getArtifacts(), getProject().getDependencyArtifacts()); + getProject().getArtifacts(), MojoHelper.getDependencyArtifacts(project)); } ThirdPartyHelper thirdPartyHelper = new DefaultThirdPartyHelper( diff --git a/src/main/java/org/codehaus/mojo/license/AddThirdPartyMojo.java b/src/main/java/org/codehaus/mojo/license/AddThirdPartyMojo.java index 7a787ea4b..5cb748d30 100644 --- a/src/main/java/org/codehaus/mojo/license/AddThirdPartyMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AddThirdPartyMojo.java @@ -48,6 +48,7 @@ import org.codehaus.mojo.license.api.ThirdPartyToolException; import org.codehaus.mojo.license.model.LicenseMap; import org.codehaus.mojo.license.utils.FileUtil; +import org.codehaus.mojo.license.utils.MojoHelper; import org.codehaus.mojo.license.utils.SortedProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -225,10 +226,10 @@ protected ResolvedProjectDependencies resolveDependencyArtifacts() throws Depend } if (isAggregatorBuild) { dependencyArtifacts = - new ResolvedProjectDependencies(project.getArtifacts(), project.getDependencyArtifacts()); + new ResolvedProjectDependencies(project.getArtifacts(), MojoHelper.getDependencyArtifacts(project)); } else { dependencyArtifacts = - new ResolvedProjectDependencies(project.getArtifacts(), project.getDependencyArtifacts()); + new ResolvedProjectDependencies(project.getArtifacts(), MojoHelper.getDependencyArtifacts(project)); } return dependencyArtifacts; } diff --git a/src/main/java/org/codehaus/mojo/license/AggregateDownloadLicensesMojo.java b/src/main/java/org/codehaus/mojo/license/AggregateDownloadLicensesMojo.java index efe8da9aa..5e860ea29 100644 --- a/src/main/java/org/codehaus/mojo/license/AggregateDownloadLicensesMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AggregateDownloadLicensesMojo.java @@ -33,6 +33,7 @@ import org.apache.maven.project.MavenProject; import org.codehaus.mojo.license.api.ResolvedProjectDependencies; import org.codehaus.mojo.license.download.LicensedArtifact; +import org.codehaus.mojo.license.utils.MojoHelper; /** * Download the license files of all aggregated dependencies of the current project, and generate a summary file @@ -116,7 +117,7 @@ protected Map getDependencies() { for (MavenProject p : reactorProjects) { licensedArtifactResolver.loadProjectDependencies( - new ResolvedProjectDependencies(p.getArtifacts(), p.getDependencyArtifacts()), + new ResolvedProjectDependencies(p.getArtifacts(), MojoHelper.getDependencyArtifacts(p)), this, remoteRepositories, result); diff --git a/src/main/java/org/codehaus/mojo/license/DownloadLicensesMojo.java b/src/main/java/org/codehaus/mojo/license/DownloadLicensesMojo.java index a7461bfc0..7662adbda 100644 --- a/src/main/java/org/codehaus/mojo/license/DownloadLicensesMojo.java +++ b/src/main/java/org/codehaus/mojo/license/DownloadLicensesMojo.java @@ -31,6 +31,7 @@ import org.apache.maven.plugins.annotations.ResolutionScope; import org.codehaus.mojo.license.api.ResolvedProjectDependencies; import org.codehaus.mojo.license.download.LicensedArtifact; +import org.codehaus.mojo.license.utils.MojoHelper; /** * Download the license files of all the current project's dependencies, and generate a summary file containing a list @@ -84,7 +85,7 @@ protected boolean isSkip() { protected Map getDependencies() { final Map result = new TreeMap<>(); licensedArtifactResolver.loadProjectDependencies( - new ResolvedProjectDependencies(project.getArtifacts(), project.getDependencyArtifacts()), + new ResolvedProjectDependencies(project.getArtifacts(), MojoHelper.getDependencyArtifacts(project)), this, remoteRepositories, result); diff --git a/src/main/java/org/codehaus/mojo/license/LicensesXmlInsertVersionsMojo.java b/src/main/java/org/codehaus/mojo/license/LicensesXmlInsertVersionsMojo.java index c96c0f718..21a6524dd 100644 --- a/src/main/java/org/codehaus/mojo/license/LicensesXmlInsertVersionsMojo.java +++ b/src/main/java/org/codehaus/mojo/license/LicensesXmlInsertVersionsMojo.java @@ -42,6 +42,7 @@ import org.codehaus.mojo.license.download.LicensedArtifact; import org.codehaus.mojo.license.download.ProjectLicenseInfo; import org.codehaus.mojo.license.utils.FileUtil; +import org.codehaus.mojo.license.utils.MojoHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -129,7 +130,7 @@ public ArtifactFilters getArtifactFilters() { }; final Map resolvedDeps = new TreeMap(); licensedArtifactResolver.loadProjectDependencies( - new ResolvedProjectDependencies(project.getArtifacts(), project.getDependencyArtifacts()), + new ResolvedProjectDependencies(project.getArtifacts(), MojoHelper.getDependencyArtifacts(project)), config, remoteRepositories, resolvedDeps); diff --git a/src/main/java/org/codehaus/mojo/license/utils/MojoHelper.java b/src/main/java/org/codehaus/mojo/license/utils/MojoHelper.java index 0f1986864..2f5dbf383 100644 --- a/src/main/java/org/codehaus/mojo/license/utils/MojoHelper.java +++ b/src/main/java/org/codehaus/mojo/license/utils/MojoHelper.java @@ -27,13 +27,17 @@ import java.net.URL; import java.text.MessageFormat; import java.util.Arrays; +import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Set; import org.apache.commons.collections.comparators.ComparatorChain; import org.apache.maven.artifact.Artifact; import org.apache.maven.model.Resource; import org.apache.maven.project.MavenProject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Mojo helper methods. @@ -42,6 +46,7 @@ * @since 1.0 */ public class MojoHelper { + private static final Logger LOG = LoggerFactory.getLogger(MojoHelper.class); /** * Add the directory as a resource of the given project. @@ -215,4 +220,25 @@ public static List getParams(String params) { String[] split = params == null ? new String[0] : params.split(","); return Arrays.asList(split); } + + /** + * {@link MavenProject#getDependencyArtifacts()} is deprecated. + * + *

+ * This method checks if the dependency artifacts is {@code null} and returns an empty {@code HashSet} to avoid the + * {@code NullPointerException}s caused by the {@link MavenProject#getDependencyArtifacts()} returning {@code null}. + *

+ * + * @param project the MavenProject to retrieve artifacts from + * @return a HashSet of dependencies or an empty set + */ + public static Set getDependencyArtifacts(MavenProject project) { + if (project == null || project.getDependencyArtifacts() == null) { + LOG.warn(""); + LOG.warn("Non-transitive dependencies cannot be found. "); + LOG.warn(""); + return Collections.emptySet(); + } + return project.getDependencyArtifacts(); + } }