From a5c756b9c4b7a6685aeb82ba72d2b6d2c7debeb6 Mon Sep 17 00:00:00 2001 From: danthe1st Date: Wed, 24 Feb 2021 12:43:51 +0100 Subject: [PATCH 1/2] Add links to license in HTML report fixes #212 This commit adds links to license URLs in the license detail table if such a URL is present. --- .../AbstractLicenseReportRenderer.java | 39 +++++----- .../license/AbstractThirdPartyReportMojo.java | 72 +++++++++++++++---- .../AggregatorThirdPartyReportMojo.java | 20 ++++++ .../mojo/license/ThirdPartyReportMojo.java | 11 +++ .../license/ThirdPartyReportRenderer.java | 8 ++- 5 files changed, 115 insertions(+), 35 deletions(-) diff --git a/src/main/java/org/codehaus/mojo/license/AbstractLicenseReportRenderer.java b/src/main/java/org/codehaus/mojo/license/AbstractLicenseReportRenderer.java index d8c7211f5..f26e307df 100644 --- a/src/main/java/org/codehaus/mojo/license/AbstractLicenseReportRenderer.java +++ b/src/main/java/org/codehaus/mojo/license/AbstractLicenseReportRenderer.java @@ -26,12 +26,14 @@ import org.apache.maven.doxia.sink.Sink; import org.apache.maven.doxia.sink.impl.SinkEventAttributeSet; import org.apache.maven.doxia.sink.SinkEventAttributes; +import org.apache.maven.model.License; import org.apache.maven.reporting.AbstractMavenReportRenderer; import org.codehaus.mojo.license.api.ThirdPartyDetails; import org.codehaus.plexus.i18n.I18N; import java.util.Collection; import java.util.Locale; +import java.util.Map; /** * Base class for report renderers. @@ -311,13 +313,16 @@ protected void safeItalic_() } } - protected void renderThirdPartyDetailTable( ThirdPartyDetails details ) + protected void renderThirdPartyDetailTable( ThirdPartyDetails details, + Map licenseLookup ) { - renderThirdPartyDetailTable( details, true, true, true ); + renderThirdPartyDetailTable( details, licenseLookup, true, true, true ); } - protected void renderThirdPartyDetailTable( ThirdPartyDetails details, boolean includeScope, - boolean includeClassifier, boolean includeType ) + protected void renderThirdPartyDetailTable( ThirdPartyDetails details, + Map licenseLookup, + boolean includeScope, boolean includeClassifier, + boolean includeType ) { final String cellWidth = "80%"; final String headerWidth = "20%"; @@ -377,7 +382,7 @@ else if ( details.hasThirdPartyLicenses() ) } String[] licenses = details.getLicenses(); - if ( details.hasPomLicenses() ) + if ( details.hasPomLicenses() || details.hasThirdPartyLicenses() ) { sink.tableRow(); sinkHeaderCellText( headerWidth, getText( "report.licenses" ) ); @@ -389,25 +394,17 @@ else if ( details.hasThirdPartyLicenses() ) { sink.lineBreak(); } - sink.text( licenses[i] ); - } - sink.tableCell_(); - sink.tableRow_(); - } - else if ( details.hasThirdPartyLicenses() ) - { - sink.tableRow(); - sinkHeaderCellText( headerWidth, getText( "report.licenses" ) ); - sink.tableCell( attrs ); - for ( int i = 0; i < licenses.length; i++ ) - { - if ( i > 0 ) + if ( licenseLookup.containsKey( licenses[i] ) ) { - sink.lineBreak(); + sink.link( licenseLookup.get( licenses[i] ).getUrl() ); + sink.text( licenses[i] ); + sink.link_(); + } + else + { + sink.text( licenses[i] ); } - sink.text( licenses[i] ); - } sink.tableCell_(); sink.tableRow_(); diff --git a/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java b/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java index 61c529c90..c0bca1b90 100644 --- a/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java @@ -26,6 +26,7 @@ import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.doxia.siterenderer.Renderer; +import org.apache.maven.model.License; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Component; @@ -57,6 +58,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; @@ -64,6 +66,7 @@ import java.util.SortedMap; import java.util.SortedSet; import java.util.TreeSet; + import org.codehaus.mojo.license.api.ResolvedProjectDependencies; /** @@ -378,6 +381,8 @@ protected abstract Collection createThirdPartyDetails() InvalidDependencyVersionException, ArtifactNotFoundException, ArtifactResolutionException, DependenciesToolException, MojoExecutionException; + protected abstract Map createLicenseLookup(); + // ---------------------------------------------------------------------- // AbstractMavenReport Implementation // ---------------------------------------------------------------------- @@ -413,11 +418,13 @@ protected void executeReport( Locale locale ) overrideUrl, project.getBasedir() ); Collection details; + Map licenseLookup; try { init(); details = createThirdPartyDetails(); + licenseLookup = createLicenseLookup(); } catch ( IOException e ) { @@ -453,7 +460,7 @@ protected void executeReport( Locale locale ) } ThirdPartyReportRenderer renderer = - new ThirdPartyReportRenderer( getSink(), i18n, getOutputName(), locale, details ); + new ThirdPartyReportRenderer( getSink(), i18n, getOutputName(), locale, details, licenseLookup ); renderer.render(); } @@ -552,17 +559,7 @@ Collection createThirdPartyDetails( MavenProject project, boo DependenciesToolException, MojoExecutionException { - ResolvedProjectDependencies loadedDependencies; - if ( loadArtifacts ) - { - loadedDependencies = - new ResolvedProjectDependencies( project.getArtifacts(), project.getDependencyArtifacts() ); - } - else - { - loadedDependencies = new ResolvedProjectDependencies( getProject().getArtifacts(), - getProject().getDependencyArtifacts() ); - } + ResolvedProjectDependencies loadedDependencies = resolveProjectDependencies( project, loadArtifacts ); ThirdPartyHelper thirdPartyHelper = new DefaultThirdPartyHelper( project, encoding, verbose, @@ -628,6 +625,57 @@ else if ( !dependenciesWithNoLicense.contains( dependency ) ) return details; } + protected Map createLicenseLookup( MavenProject project, boolean loadArtifacts ) + { + Map licenseLookup = new HashMap<>(); + + ResolvedProjectDependencies loadedDependencies = resolveProjectDependencies( project, loadArtifacts ); + + ThirdPartyHelper thirdPartyHelper = + new DefaultThirdPartyHelper( project, encoding, verbose, + dependenciesTool, thirdPartyTool, + project.getRemoteArtifactRepositories(), project.getRemoteProjectRepositories() ); + // load dependencies of the project + SortedMap projectDependencies = thirdPartyHelper.loadDependencies( this, + loadedDependencies ); + + //add the licenses to the lookup table + for ( MavenProject dependency : projectDependencies.values() ) + { + + for ( License license : dependency.getLicenses() ) + { + + String licenseName = license.getName(); + + if ( !licenseLookup.containsKey( license.getName() ) ) + { + licenseLookup.put( licenseName, license ); + } + + } + + } + + return licenseLookup; + } + + private ResolvedProjectDependencies resolveProjectDependencies( MavenProject project, boolean loadArtifacts ) + { + ResolvedProjectDependencies loadedDependencies; + if ( loadArtifacts ) + { + loadedDependencies = + new ResolvedProjectDependencies( project.getArtifacts(), project.getDependencyArtifacts() ); + } + else + { + loadedDependencies = new ResolvedProjectDependencies( getProject().getArtifacts(), + getProject().getDependencyArtifacts() ); + } + return loadedDependencies; + } + /** {@inheritDoc} */ public String getArtifactFiltersUrl() { diff --git a/src/main/java/org/codehaus/mojo/license/AggregatorThirdPartyReportMojo.java b/src/main/java/org/codehaus/mojo/license/AggregatorThirdPartyReportMojo.java index dbbfa1223..30a6eade0 100644 --- a/src/main/java/org/codehaus/mojo/license/AggregatorThirdPartyReportMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AggregatorThirdPartyReportMojo.java @@ -24,6 +24,7 @@ import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; +import org.apache.maven.model.License; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Mojo; @@ -38,8 +39,10 @@ import java.io.IOException; import java.util.Collection; +import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; /** * Generates a report of all third-parties detected in the module. @@ -132,4 +135,21 @@ protected Collection createThirdPartyDetails() return details; } + /** + * {@inheritDoc} + */ + protected Map createLicenseLookup() + { + Map licenses = new HashMap<>(); + + for ( MavenProject reactorProject : reactorProjects ) + { + + Map thirdPartyLicenses = createLicenseLookup( reactorProject, true ); + licenses.putAll( thirdPartyLicenses ); + + } + + return licenses; + } } \ No newline at end of file diff --git a/src/main/java/org/codehaus/mojo/license/ThirdPartyReportMojo.java b/src/main/java/org/codehaus/mojo/license/ThirdPartyReportMojo.java index 81f2cd4da..1d8b62907 100644 --- a/src/main/java/org/codehaus/mojo/license/ThirdPartyReportMojo.java +++ b/src/main/java/org/codehaus/mojo/license/ThirdPartyReportMojo.java @@ -22,6 +22,7 @@ * #L% */ +import org.apache.maven.model.License; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Mojo; @@ -34,6 +35,7 @@ import java.io.IOException; import java.util.Collection; +import java.util.Map; /** * Generates a report of all third-parties detected in the module. @@ -89,4 +91,13 @@ protected Collection createThirdPartyDetails() { return createThirdPartyDetails( getProject(), false ); } + + /** + * {@inheritDoc} + */ + @Override + protected Map createLicenseLookup() + { + return createLicenseLookup( getProject(), false ); + } } diff --git a/src/main/java/org/codehaus/mojo/license/ThirdPartyReportRenderer.java b/src/main/java/org/codehaus/mojo/license/ThirdPartyReportRenderer.java index a7927b1f0..b691c69d8 100644 --- a/src/main/java/org/codehaus/mojo/license/ThirdPartyReportRenderer.java +++ b/src/main/java/org/codehaus/mojo/license/ThirdPartyReportRenderer.java @@ -24,12 +24,14 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.maven.doxia.sink.Sink; +import org.apache.maven.model.License; import org.codehaus.mojo.license.api.ThirdPartyDetails; import org.codehaus.plexus.i18n.I18N; import java.util.ArrayList; import java.util.Collection; import java.util.Locale; +import java.util.Map; /** * Generates a report of third parties of the project. @@ -41,12 +43,14 @@ public class ThirdPartyReportRenderer extends AbstractLicenseReportRenderer { private final Collection details; + private final Map licenseLookup; public ThirdPartyReportRenderer( Sink sink, I18N i18n, String outputName, Locale locale, - Collection details ) + Collection details, Map licenseLookup ) { super( sink, outputName, i18n, locale ); this.details = details; + this.licenseLookup = licenseLookup; } protected Collection getThirdPartiesPomLicense() @@ -259,7 +263,7 @@ private void renderThirdPartyDetail( ThirdPartyDetails detail ) sink.sectionTitle2(); sink.text( getGAV( detail ) ); sink.sectionTitle2_(); - renderThirdPartyDetailTable( detail ); + renderThirdPartyDetailTable( detail, licenseLookup ); sink.link( "#" + getText( "report.overview.title" ) ); sink.text( getText( "report.back.to.top.page" ) ); From 64e470783ac2f8f3eb3c6b24d7c609bb94b5a315 Mon Sep 17 00:00:00 2001 From: danthe1st Date: Wed, 24 Feb 2021 21:37:00 +0100 Subject: [PATCH 2/2] make license links in third-party-report configurable allows to configure license links in third-party-report details using the parameter license.urlmappings --- .../AbstractLicenseReportRenderer.java | 7 ++--- .../license/AbstractThirdPartyReportMojo.java | 28 +++++++++++++++---- .../AggregatorThirdPartyReportMojo.java | 7 ++--- .../mojo/license/ThirdPartyReportMojo.java | 3 +- .../license/ThirdPartyReportRenderer.java | 5 ++-- 5 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/codehaus/mojo/license/AbstractLicenseReportRenderer.java b/src/main/java/org/codehaus/mojo/license/AbstractLicenseReportRenderer.java index f26e307df..0b9544d5c 100644 --- a/src/main/java/org/codehaus/mojo/license/AbstractLicenseReportRenderer.java +++ b/src/main/java/org/codehaus/mojo/license/AbstractLicenseReportRenderer.java @@ -26,7 +26,6 @@ import org.apache.maven.doxia.sink.Sink; import org.apache.maven.doxia.sink.impl.SinkEventAttributeSet; import org.apache.maven.doxia.sink.SinkEventAttributes; -import org.apache.maven.model.License; import org.apache.maven.reporting.AbstractMavenReportRenderer; import org.codehaus.mojo.license.api.ThirdPartyDetails; import org.codehaus.plexus.i18n.I18N; @@ -314,13 +313,13 @@ protected void safeItalic_() } protected void renderThirdPartyDetailTable( ThirdPartyDetails details, - Map licenseLookup ) + Map licenseLookup ) { renderThirdPartyDetailTable( details, licenseLookup, true, true, true ); } protected void renderThirdPartyDetailTable( ThirdPartyDetails details, - Map licenseLookup, + Map licenseLookup, boolean includeScope, boolean includeClassifier, boolean includeType ) { @@ -397,7 +396,7 @@ else if ( details.hasThirdPartyLicenses() ) if ( licenseLookup.containsKey( licenses[i] ) ) { - sink.link( licenseLookup.get( licenses[i] ).getUrl() ); + sink.link( licenseLookup.get( licenses[i] ) ); sink.text( licenses[i] ); sink.link_(); } diff --git a/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java b/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java index c0bca1b90..89c3c95f6 100644 --- a/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java @@ -62,6 +62,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Properties; import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; @@ -372,6 +373,16 @@ public abstract class AbstractThirdPartyReportMojo extends AbstractMavenReport private ArtifactFilters artifactFilters; + /** + * Maps license names to URLs. + * + * This is used by the
third-party-report
-goal in order to set custom license URLs + * + * @since 2.0.1 + */ + @Parameter( property = "license.urlmappings" ) + private Properties urlMappings; + // ---------------------------------------------------------------------- // Protected Abstract Methods // ---------------------------------------------------------------------- @@ -381,7 +392,7 @@ protected abstract Collection createThirdPartyDetails() InvalidDependencyVersionException, ArtifactNotFoundException, ArtifactResolutionException, DependenciesToolException, MojoExecutionException; - protected abstract Map createLicenseLookup(); + protected abstract Map createLicenseLookup(); // ---------------------------------------------------------------------- // AbstractMavenReport Implementation @@ -418,7 +429,7 @@ protected void executeReport( Locale locale ) overrideUrl, project.getBasedir() ); Collection details; - Map licenseLookup; + Map licenseLookup; try { @@ -625,9 +636,15 @@ else if ( !dependenciesWithNoLicense.contains( dependency ) ) return details; } - protected Map createLicenseLookup( MavenProject project, boolean loadArtifacts ) + protected Map createLicenseLookup( MavenProject project, boolean loadArtifacts ) { - Map licenseLookup = new HashMap<>(); + Map licenseLookup = new HashMap<>(); + + //load explicit license url mappings + for ( String licenseName : urlMappings.stringPropertyNames() ) + { + licenseLookup.put( licenseName, urlMappings.getProperty( licenseName ) ); + } ResolvedProjectDependencies loadedDependencies = resolveProjectDependencies( project, loadArtifacts ); @@ -645,12 +662,11 @@ protected Map createLicenseLookup( MavenProject project, boolea for ( License license : dependency.getLicenses() ) { - String licenseName = license.getName(); if ( !licenseLookup.containsKey( license.getName() ) ) { - licenseLookup.put( licenseName, license ); + licenseLookup.put( licenseName, license.getUrl() ); } } diff --git a/src/main/java/org/codehaus/mojo/license/AggregatorThirdPartyReportMojo.java b/src/main/java/org/codehaus/mojo/license/AggregatorThirdPartyReportMojo.java index 30a6eade0..2e12565c2 100644 --- a/src/main/java/org/codehaus/mojo/license/AggregatorThirdPartyReportMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AggregatorThirdPartyReportMojo.java @@ -24,7 +24,6 @@ import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.apache.maven.model.License; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Mojo; @@ -138,14 +137,14 @@ protected Collection createThirdPartyDetails() /** * {@inheritDoc} */ - protected Map createLicenseLookup() + protected Map createLicenseLookup() { - Map licenses = new HashMap<>(); + Map licenses = new HashMap<>(); for ( MavenProject reactorProject : reactorProjects ) { - Map thirdPartyLicenses = createLicenseLookup( reactorProject, true ); + Map thirdPartyLicenses = createLicenseLookup( reactorProject, true ); licenses.putAll( thirdPartyLicenses ); } diff --git a/src/main/java/org/codehaus/mojo/license/ThirdPartyReportMojo.java b/src/main/java/org/codehaus/mojo/license/ThirdPartyReportMojo.java index 1d8b62907..b7f9cc168 100644 --- a/src/main/java/org/codehaus/mojo/license/ThirdPartyReportMojo.java +++ b/src/main/java/org/codehaus/mojo/license/ThirdPartyReportMojo.java @@ -22,7 +22,6 @@ * #L% */ -import org.apache.maven.model.License; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Mojo; @@ -96,7 +95,7 @@ protected Collection createThirdPartyDetails() * {@inheritDoc} */ @Override - protected Map createLicenseLookup() + protected Map createLicenseLookup() { return createLicenseLookup( getProject(), false ); } diff --git a/src/main/java/org/codehaus/mojo/license/ThirdPartyReportRenderer.java b/src/main/java/org/codehaus/mojo/license/ThirdPartyReportRenderer.java index b691c69d8..d5794eb16 100644 --- a/src/main/java/org/codehaus/mojo/license/ThirdPartyReportRenderer.java +++ b/src/main/java/org/codehaus/mojo/license/ThirdPartyReportRenderer.java @@ -24,7 +24,6 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.maven.doxia.sink.Sink; -import org.apache.maven.model.License; import org.codehaus.mojo.license.api.ThirdPartyDetails; import org.codehaus.plexus.i18n.I18N; @@ -43,10 +42,10 @@ public class ThirdPartyReportRenderer extends AbstractLicenseReportRenderer { private final Collection details; - private final Map licenseLookup; + private final Map licenseLookup; public ThirdPartyReportRenderer( Sink sink, I18N i18n, String outputName, Locale locale, - Collection details, Map licenseLookup ) + Collection details, Map licenseLookup ) { super( sink, outputName, i18n, locale ); this.details = details;