diff --git a/pom.xml b/pom.xml index 63752ddcb..7eea48632 100644 --- a/pom.xml +++ b/pom.xml @@ -111,7 +111,7 @@ - 2.2.1 + 3.5.4 1.7 1.3 @@ -132,6 +132,7 @@ 3.5.1 1.7.1 + 1.3.3 @@ -156,13 +157,13 @@ org.apache.maven - maven-project + maven-artifact ${mavenVersion} - org.apache.maven - maven-artifact - ${mavenVersion} + org.apache.maven.resolver + maven-resolver-api + ${maven-resolver.version} org.apache.maven @@ -255,7 +256,7 @@ org.codehaus.plexus plexus-container-default - 1.0-alpha-9-stable-1 + 2.0.0 provided diff --git a/src/it/add-third-party-excluded-included/invoker.properties b/src/it/add-third-party-excluded-included/invoker.properties index 5ebcb2576..e0b1c23e3 100644 --- a/src/it/add-third-party-excluded-included/invoker.properties +++ b/src/it/add-third-party-excluded-included/invoker.properties @@ -19,5 +19,5 @@ # . # #L% ### -invoker.goals=clean validate +invoker.goals=clean validate -e invoker.failureBehavior=fail-at-end \ No newline at end of file diff --git a/src/it/add-third-party-global-db/invoker.properties b/src/it/add-third-party-global-db/invoker.properties index 2e3f664c6..c60f39f34 100644 --- a/src/it/add-third-party-global-db/invoker.properties +++ b/src/it/add-third-party-global-db/invoker.properties @@ -19,5 +19,5 @@ # . # #L% ### -invoker.goals=clean package license:add-third-party +invoker.goals=clean package license:add-third-party -e invoker.failureBehavior=fail-fast \ No newline at end of file diff --git a/src/it/aggregate-add-third-party-global-db/invoker.properties b/src/it/aggregate-add-third-party-global-db/invoker.properties index f5a9f8010..d2e981f97 100644 --- a/src/it/aggregate-add-third-party-global-db/invoker.properties +++ b/src/it/aggregate-add-third-party-global-db/invoker.properties @@ -19,6 +19,6 @@ # . # #L% ### -invoker.goals=clean license:aggregate-add-third-party +invoker.goals=clean license:aggregate-add-third-party -e invoker.failureBehavior=fail-at-end invoker.maven.version = 3.0 + diff --git a/src/it/aggregate-add-third-party-missing-file/invoker.properties b/src/it/aggregate-add-third-party-missing-file/invoker.properties index d94c96107..6d2297dbf 100644 --- a/src/it/aggregate-add-third-party-missing-file/invoker.properties +++ b/src/it/aggregate-add-third-party-missing-file/invoker.properties @@ -19,5 +19,5 @@ # . # #L% ### -invoker.goals=clean license:aggregate-add-third-party@missing-file-only license:aggregate-add-third-party@missing-file-url-only license:aggregate-add-third-party@missing-file-both +invoker.goals=clean license:aggregate-add-third-party@missing-file-only license:aggregate-add-third-party@missing-file-url-only license:aggregate-add-third-party@missing-file-both -e invoker.failureBehavior=fail-fast \ No newline at end of file diff --git a/src/it/third-party-report-global-db/invoker.properties b/src/it/third-party-report-global-db/invoker.properties index 2aa5f872a..ef64c80c7 100644 --- a/src/it/third-party-report-global-db/invoker.properties +++ b/src/it/third-party-report-global-db/invoker.properties @@ -19,5 +19,5 @@ # . # #L% ### -invoker.goals=clean site:site +invoker.goals=clean site:site -e invoker.failureBehavior=fail-fast \ No newline at end of file diff --git a/src/main/java/org/codehaus/mojo/license/AbstractAddThirdPartyMojo.java b/src/main/java/org/codehaus/mojo/license/AbstractAddThirdPartyMojo.java index 233a2cdb7..484738979 100644 --- a/src/main/java/org/codehaus/mojo/license/AbstractAddThirdPartyMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AbstractAddThirdPartyMojo.java @@ -27,8 +27,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; -import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugin.logging.Log; @@ -59,6 +57,8 @@ import java.util.SortedMap; import java.util.SortedSet; import org.codehaus.mojo.license.api.DependenciesToolException; +import org.eclipse.aether.resolution.ArtifactResolutionException; +import org.eclipse.aether.transfer.ArtifactNotFoundException; /** * Abstract mojo for all third-party mojos. @@ -592,14 +592,6 @@ public abstract class AbstractAddThirdPartyMojo @Parameter( property = "localRepository", required = true, readonly = true ) protected ArtifactRepository localRepository; - /** - * Remote repositories used for the project. - * - * @since 1.0.0 - */ - @Parameter( property = "project.remoteArtifactRepositories", required = true, readonly = true ) - protected List remoteRepositories; - /** * The set of dependencies for the current project, used to locate license databases. */ @@ -881,7 +873,8 @@ protected ThirdPartyHelper getHelper() if ( helper == null ) { helper = new DefaultThirdPartyHelper( getProject(), getEncoding(), isVerbose(), dependenciesTool, - thirdPartyTool, localRepository, remoteRepositories, getLog() ); + thirdPartyTool, getProject().getRemoteArtifactRepositories(), + getProject().getRemoteProjectRepositories(), getLog() ); } return helper; } @@ -890,7 +883,7 @@ void resolveUnsafeDependenciesFromArtifact( String groupId, String artifactId, S throws ArtifactNotFoundException, IOException, ArtifactResolutionException, MojoExecutionException { File missingLicensesFromArtifact = thirdPartyTool.resolveMissingLicensesDescriptor( groupId, artifactId, - version, localRepository, remoteRepositories ); + version, getProject().getRemoteProjectRepositories() ); resolveUnsafeDependenciesFromFile( missingLicensesFromArtifact ); } diff --git a/src/main/java/org/codehaus/mojo/license/AbstractDownloadLicensesMojo.java b/src/main/java/org/codehaus/mojo/license/AbstractDownloadLicensesMojo.java index 2261b8252..2041babb2 100644 --- a/src/main/java/org/codehaus/mojo/license/AbstractDownloadLicensesMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AbstractDownloadLicensesMojo.java @@ -79,14 +79,6 @@ public abstract class AbstractDownloadLicensesMojo // Mojo Parameters // ---------------------------------------------------------------------- - /** - * Location of the local repository. - * - * @since 1.0 - */ - @Parameter( defaultValue = "${localRepository}", readonly = true ) - protected ArtifactRepository localRepository; - /** * List of Remote Repositories used by the resolver * diff --git a/src/main/java/org/codehaus/mojo/license/AbstractLicensesXmlMojo.java b/src/main/java/org/codehaus/mojo/license/AbstractLicensesXmlMojo.java index cc665bfdf..e80af56d8 100644 --- a/src/main/java/org/codehaus/mojo/license/AbstractLicensesXmlMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AbstractLicensesXmlMojo.java @@ -83,14 +83,6 @@ public abstract class AbstractLicensesXmlMojo @Parameter( property = "licensesOutputFileEncoding", defaultValue = "${project.build.sourceEncoding}" ) private String licensesOutputFileEncoding; - /** - * Location of the local repository. - * - * @since 1.0 - */ - @Parameter( defaultValue = "${localRepository}", readonly = true ) - protected ArtifactRepository localRepository; - /** * List of Remote Repositories used by the resolver * @@ -108,12 +100,12 @@ public abstract class AbstractLicensesXmlMojo protected MavenProject project; /** - * Dependencies tool. + * Licensed artifact resolver. * * @since 1.0 */ @Component - protected LicensedArtifactResolver dependenciesTool; + protected LicensedArtifactResolver licensedArtifactResolver; private Charset charset; diff --git a/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java b/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java index 85fa6dfae..6e2251c08 100644 --- a/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AbstractThirdPartyReportMojo.java @@ -23,7 +23,6 @@ */ import org.apache.commons.collections.CollectionUtils; -import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.doxia.siterenderer.Renderer; @@ -301,14 +300,6 @@ public abstract class AbstractThirdPartyReportMojo extends AbstractMavenReport @Parameter( property = "license.encoding", defaultValue = "${project.build.sourceEncoding}" ) private String encoding; - /** - * Local Repository. - * - * @since 1.1 - */ - @Parameter( property = "localRepository", required = true, readonly = true ) - private ArtifactRepository localRepository; - /** * The Maven Project. * @@ -437,10 +428,6 @@ protected void executeReport( Locale locale ) { throw new MavenReportException( e.getMessage(), e ); } - catch ( InvalidDependencyVersionException e ) - { - throw new MavenReportException( e.getMessage(), e ); - } catch ( ArtifactNotFoundException e ) { throw new MavenReportException( e.getMessage(), e ); @@ -577,7 +564,7 @@ Collection createThirdPartyDetails( MavenProject project, boo ThirdPartyHelper thirdPartyHelper = new DefaultThirdPartyHelper( project, encoding, verbose, dependenciesTool, thirdPartyTool, - localRepository, project.getRemoteArtifactRepositories(), getLog() ); + project.getRemoteArtifactRepositories(), project.getRemoteProjectRepositories(), getLog() ); // load dependencies of the project SortedMap projectDependencies = thirdPartyHelper.loadDependencies( this, loadedDependencies ); @@ -650,5 +637,4 @@ public String getEncoding() return encoding; } - } diff --git a/src/main/java/org/codehaus/mojo/license/AddThirdPartyMojo.java b/src/main/java/org/codehaus/mojo/license/AddThirdPartyMojo.java index 5a91acc04..388f83d75 100644 --- a/src/main/java/org/codehaus/mojo/license/AddThirdPartyMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AddThirdPartyMojo.java @@ -442,8 +442,7 @@ void initFromMojo( AggregatorAddThirdPartyMojo mojo, MavenProject mavenProject, resolvedOverrideUrl = mojo.resolvedOverrideUrl; missingLicensesFileArtifact = mojo.missingLicensesFileArtifact; localRepository = mojo.localRepository; - remoteRepositories = mavenProject.getRemoteArtifactRepositories(); - dependencies = new HashSet<>( mavenProject.getDependencies() ); + dependencies = new HashSet<>( mavenProject.getDependencyArtifacts() ); licenseMerges = mojo.licenseMerges; licenseMergesFile = mojo.licenseMergesFile; includedLicenses = mojo.includedLicenses; diff --git a/src/main/java/org/codehaus/mojo/license/AggregateDownloadLicensesMojo.java b/src/main/java/org/codehaus/mojo/license/AggregateDownloadLicensesMojo.java index 1dac80f46..66aaa9ac4 100644 --- a/src/main/java/org/codehaus/mojo/license/AggregateDownloadLicensesMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AggregateDownloadLicensesMojo.java @@ -115,9 +115,9 @@ protected Map getDependencies() for ( MavenProject p : reactorProjects ) { - dependenciesTool.loadProjectDependencies( new ResolvedProjectDependencies( p.getArtifacts(), + licensedArtifactResolver.loadProjectDependencies( new ResolvedProjectDependencies( p.getArtifacts(), p.getDependencyArtifacts() ), - this, localRepository, remoteRepositories, result ); + this, remoteRepositories, result ); } return result; } diff --git a/src/main/java/org/codehaus/mojo/license/DownloadLicensesMojo.java b/src/main/java/org/codehaus/mojo/license/DownloadLicensesMojo.java index 0cd4cbbcc..dd75dbe86 100644 --- a/src/main/java/org/codehaus/mojo/license/DownloadLicensesMojo.java +++ b/src/main/java/org/codehaus/mojo/license/DownloadLicensesMojo.java @@ -86,9 +86,9 @@ protected boolean isSkip() protected Map getDependencies() { final Map result = new TreeMap<>(); - dependenciesTool.loadProjectDependencies( + licensedArtifactResolver.loadProjectDependencies( new ResolvedProjectDependencies( project.getArtifacts(), project.getDependencyArtifacts() ), - this, localRepository, remoteRepositories, result ); + this, remoteRepositories, result ); return result; } diff --git a/src/main/java/org/codehaus/mojo/license/LicensesXmlInsertVersionsMojo.java b/src/main/java/org/codehaus/mojo/license/LicensesXmlInsertVersionsMojo.java index b154acab7..087cbb8ef 100644 --- a/src/main/java/org/codehaus/mojo/license/LicensesXmlInsertVersionsMojo.java +++ b/src/main/java/org/codehaus/mojo/license/LicensesXmlInsertVersionsMojo.java @@ -137,9 +137,9 @@ public ArtifactFilters getArtifactFilters() } }; final Map resolvedDeps = new TreeMap(); - dependenciesTool.loadProjectDependencies( + licensedArtifactResolver.loadProjectDependencies( new ResolvedProjectDependencies( project.getArtifacts(), project.getDependencyArtifacts() ), - config, localRepository, remoteRepositories, resolvedDeps ); + config, remoteRepositories, resolvedDeps ); final Map resolvedDepsMap = new HashMap<>( resolvedDeps.size() ); for ( LicensedArtifact dep : resolvedDeps.values() ) { diff --git a/src/main/java/org/codehaus/mojo/license/api/DefaultThirdPartyHelper.java b/src/main/java/org/codehaus/mojo/license/api/DefaultThirdPartyHelper.java index eb5dbb7a5..f2225b10c 100644 --- a/src/main/java/org/codehaus/mojo/license/api/DefaultThirdPartyHelper.java +++ b/src/main/java/org/codehaus/mojo/license/api/DefaultThirdPartyHelper.java @@ -45,6 +45,7 @@ import java.util.SortedMap; import java.util.SortedSet; import java.util.TreeMap; +import org.eclipse.aether.repository.RemoteRepository; /** * Default implementation of the {@link org.codehaus.mojo.license.api.ThirdPartyHelper}. @@ -71,14 +72,14 @@ public class DefaultThirdPartyHelper private final ThirdPartyTool thirdPartyTool; /** - * Local repository used. + * List of remote repositories. Same as remoteRepositories, just a different API. */ - private final ArtifactRepository localRepository; + private final List remoteRepositoriesCoreApi; /** * List of remote repositories. */ - private final List remoteRepositories; + private final List remoteRepositories; /** * Current maven project. @@ -113,15 +114,15 @@ public class DefaultThirdPartyHelper * @param verbose Verbose flag * @param dependenciesTool tool to load dependencies * @param thirdPartyTool tool to load third-parties descriptors - * @param localRepository maven local repository + * @param remoteRepositoriesCoreApi maven remote repositories, in the core api format * @param remoteRepositories maven remote repositories * @param log logger */ // CHECKSTYLE_OFF: ParameterNumber public DefaultThirdPartyHelper( MavenProject project, String encoding, boolean verbose, DependenciesTool dependenciesTool, ThirdPartyTool thirdPartyTool, - ArtifactRepository localRepository, List remoteRepositories, - Log log ) + List remoteRepositoriesCoreApi, + List remoteRepositories, Log log ) { // CHECKSTYLE_ON: ParameterNumber this.project = project; @@ -129,7 +130,7 @@ public DefaultThirdPartyHelper( MavenProject project, String encoding, boolean v this.verbose = verbose; this.dependenciesTool = dependenciesTool; this.thirdPartyTool = thirdPartyTool; - this.localRepository = localRepository; + this.remoteRepositoriesCoreApi = remoteRepositoriesCoreApi; this.remoteRepositories = remoteRepositories; this.log = log; this.thirdPartyTool.setVerbose( verbose ); @@ -153,8 +154,8 @@ public SortedMap getArtifactCache() public SortedMap loadDependencies( MavenProjectDependenciesConfigurator configuration, ResolvedProjectDependencies dependencyArtifacts ) { - return dependenciesTool.loadProjectDependencies( dependencyArtifacts, configuration, localRepository, - remoteRepositories, getArtifactCache() ); + return dependenciesTool.loadProjectDependencies( dependencyArtifacts, configuration, + remoteRepositoriesCoreApi, getArtifactCache() ); } /** @@ -167,8 +168,7 @@ public SortedProperties loadThirdPartyDescriptorForUnsafeMapping( Set throws ThirdPartyToolException, IOException { return thirdPartyTool.loadThirdPartyDescriptorsForUnsafeMapping( topLevelDependencies, encoding, projects, - unsafeDependencies, licenseMap, - localRepository, remoteRepositories ); + unsafeDependencies, licenseMap, remoteRepositories ); } /** diff --git a/src/main/java/org/codehaus/mojo/license/api/DefaultThirdPartyTool.java b/src/main/java/org/codehaus/mojo/license/api/DefaultThirdPartyTool.java index 117308cdd..56bf0a6f1 100644 --- a/src/main/java/org/codehaus/mojo/license/api/DefaultThirdPartyTool.java +++ b/src/main/java/org/codehaus/mojo/license/api/DefaultThirdPartyTool.java @@ -47,11 +47,7 @@ import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; -import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.apache.maven.artifact.resolver.ArtifactResolver; +import org.apache.maven.execution.MavenSession; import org.apache.maven.model.License; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.project.MavenProject; @@ -66,6 +62,14 @@ import org.codehaus.plexus.component.annotations.Requirement; import org.codehaus.plexus.logging.AbstractLogEnabled; import org.codehaus.plexus.logging.Logger; +import org.eclipse.aether.RepositorySystemSession; +import org.eclipse.aether.artifact.DefaultArtifact; +import org.eclipse.aether.artifact.DefaultArtifactType; +import org.eclipse.aether.repository.RemoteRepository; +import org.eclipse.aether.resolution.ArtifactRequest; +import org.eclipse.aether.resolution.ArtifactResolutionException; +import org.eclipse.aether.resolution.ArtifactResult; +import org.eclipse.aether.transfer.ArtifactNotFoundException; /** * Default implementation of the third party tool. @@ -106,16 +110,13 @@ public class DefaultThirdPartyTool // ---------------------------------------------------------------------- /** - * The component that is used to resolve additional artifacts required. + * Maven Artifact Resolver repoSystem */ @Requirement - private ArtifactResolver artifactResolver; + private org.eclipse.aether.RepositorySystem aetherRepoSystem; - /** - * The component used for creating artifact instances. - */ @Requirement - private ArtifactFactory artifactFactory; + private MavenSession mavenSession; /** * Maven ProjectHelper. @@ -207,8 +208,7 @@ public SortedProperties loadThirdPartyDescriptorsForUnsafeMapping( Set Collection projects, SortedSet unsafeDependencies, LicenseMap licenseMap, - ArtifactRepository localRepository, - List remoteRepositories ) + List remoteRepositories ) throws ThirdPartyToolException, IOException { @@ -230,7 +230,7 @@ public SortedProperties loadThirdPartyDescriptorsForUnsafeMapping( Set break; } - File thirdPartyDescriptor = resolvThirdPartyDescriptor( mavenProject, localRepository, remoteRepositories ); + File thirdPartyDescriptor = resolvThirdPartyDescriptor( mavenProject, remoteRepositories ); if ( thirdPartyDescriptor != null && thirdPartyDescriptor.exists() && thirdPartyDescriptor.length() > 0 ) { @@ -257,7 +257,7 @@ public SortedProperties loadThirdPartyDescriptorsForUnsafeMapping( Set } try { - loadGlobalLicenses( topLevelDependencies, localRepository, remoteRepositories, unsafeDependencies, + loadGlobalLicenses( topLevelDependencies, remoteRepositories, unsafeDependencies, licenseMap, unsafeProjects, result ); } catch ( ArtifactNotFoundException e ) @@ -304,26 +304,21 @@ private void resolveUnsafe( SortedSet unsafeDependencies, LicenseM /** * {@inheritDoc} */ - public File resolvThirdPartyDescriptor( MavenProject project, ArtifactRepository localRepository, - List repositories ) + public File resolvThirdPartyDescriptor( MavenProject project, List remoteRepositories ) throws ThirdPartyToolException { if ( project == null ) { throw new IllegalArgumentException( "The parameter 'project' can not be null" ); } - if ( localRepository == null ) + if ( remoteRepositories == null ) { - throw new IllegalArgumentException( "The parameter 'localRepository' can not be null" ); - } - if ( repositories == null ) - { - throw new IllegalArgumentException( "The parameter 'remoteArtifactRepositories' can not be null" ); + throw new IllegalArgumentException( "The parameter 'remoteRepositories' can not be null" ); } try { - return resolveThirdPartyDescriptor( project, localRepository, repositories ); + return resolveThirdPartyDescriptor( project, remoteRepositories ); } catch ( ArtifactNotFoundException e ) { @@ -692,17 +687,17 @@ public void writeBundleThirdPartyFile( File thirdPartyFile, File outputDirectory FileUtil.copyFile( thirdPartyFile, bundleTarget ); } - private void loadGlobalLicenses( Set dependencies, ArtifactRepository localRepository, - List repositories, SortedSet unsafeDependencies, - LicenseMap licenseMap, Map unsafeProjects, - SortedProperties result ) + private void loadGlobalLicenses( Set dependencies, List remoteRepositories, + SortedSet unsafeDependencies, + LicenseMap licenseMap, Map unsafeProjects, + SortedProperties result ) throws IOException, ArtifactNotFoundException, ArtifactResolutionException { for ( Artifact dep : dependencies ) { if ( LICENSE_DB_TYPE.equals( dep.getType() ) ) { - loadOneGlobalSet( unsafeDependencies, licenseMap, unsafeProjects, dep, localRepository, repositories, + loadOneGlobalSet( unsafeDependencies, licenseMap, unsafeProjects, dep, remoteRepositories, result ); } } @@ -710,12 +705,12 @@ private void loadGlobalLicenses( Set dependencies, ArtifactRepository private void loadOneGlobalSet( SortedSet unsafeDependencies, LicenseMap licenseMap, Map unsafeProjects, Artifact dep, - ArtifactRepository localRepository, List repositories, + List remoteRepositories, SortedProperties result ) throws IOException, ArtifactNotFoundException, ArtifactResolutionException { - artifactResolver.resolve( dep, repositories, localRepository ); - File propFile = dep.getFile(); + File propFile = resolveArtifact( dep.getGroupId(), dep.getArtifactId(), dep.getVersion(), dep.getType(), + dep.getClassifier(), remoteRepositories ); getLogger().info( String.format( "Loading global license map from %s: %s", dep.toString(), propFile.getAbsolutePath() ) ); SortedProperties props = new SortedProperties( "utf-8" ); @@ -754,15 +749,14 @@ private void loadOneGlobalSet( SortedSet unsafeDependencies, Licen * @throws ArtifactResolutionException if any * @throws ArtifactNotFoundException if any */ - private File resolveThirdPartyDescriptor( MavenProject project, ArtifactRepository localRepository, - List repositories ) + private File resolveThirdPartyDescriptor( MavenProject project, List remoteRepositories ) throws IOException, ArtifactResolutionException, ArtifactNotFoundException { File result; try { result = resolveArtifact( project.getGroupId(), project.getArtifactId(), project.getVersion(), - DESCRIPTOR_TYPE, DESCRIPTOR_CLASSIFIER, localRepository, repositories ); + DESCRIPTOR_TYPE, DESCRIPTOR_CLASSIFIER, remoteRepositories ); // we use zero length files to avoid re-resolution (see below) if ( result.length() == 0 ) @@ -770,43 +764,66 @@ private File resolveThirdPartyDescriptor( MavenProject project, ArtifactReposito getLogger().debug( "Skipped third party descriptor" ); } } - catch ( ArtifactNotFoundException e ) + catch ( ArtifactResolutionException e ) { - getLogger().debug( "Unable to locate third party files descriptor : " + e ); + if ( e.getCause() instanceof ArtifactNotFoundException ) + { + ArtifactNotFoundException artifactNotFoundException = ( ArtifactNotFoundException ) e.getCause(); + getLogger().debug( "Unable to locate third party files descriptor : " + artifactNotFoundException ); - Artifact artifact = e.getArtifact() == null - ? artifactFactory.createArtifactWithClassifier( - project.getGroupId(), project.getArtifactId(), project.getVersion(), - DESCRIPTOR_TYPE, DESCRIPTOR_CLASSIFIER ) - : e.getArtifact(); + org.eclipse.aether.artifact.Artifact artifact; + if ( artifactNotFoundException.getArtifact() == null ) + { + artifact = new DefaultArtifact( project.getGroupId(), project.getArtifactId(), + DESCRIPTOR_CLASSIFIER, null, project.getVersion(), + new DefaultArtifactType( DESCRIPTOR_TYPE ) ); + } + else + { + artifact = artifactNotFoundException.getArtifact(); + } - // we can afford to write an empty descriptor here as we don't expect it to turn up later in the remote - // repository, because the parent was already released (and snapshots are updated automatically if changed) - result = new File( localRepository.getBasedir(), localRepository.pathOf( artifact ) ); + /* + * we can afford to write an empty descriptor here + * as we don't expect it to turn up later in the remote + * repository, because the parent was already released + * (and snapshots are updated automatically if changed) + */ + RepositorySystemSession aetherSession = mavenSession.getRepositorySession(); + result = new File( aetherSession.getLocalRepository().getBasedir(), + aetherSession.getLocalRepositoryManager().getPathForLocalArtifact( artifact ) ); + } + else + { + throw e; + } } return result; } public File resolveMissingLicensesDescriptor( String groupId, String artifactId, String version, - ArtifactRepository localRepository, List repositories ) + List remoteRepositories ) throws IOException, ArtifactResolutionException, ArtifactNotFoundException { - return resolveArtifact( groupId, artifactId, version, DESCRIPTOR_TYPE, DESCRIPTOR_CLASSIFIER, localRepository, - repositories ); + return resolveArtifact( groupId, artifactId, version, DESCRIPTOR_TYPE, + DESCRIPTOR_CLASSIFIER, remoteRepositories ); } private File resolveArtifact( String groupId, String artifactId, String version, - String type, String classifier, ArtifactRepository localRepository, List repositories ) - throws ArtifactResolutionException, IOException, ArtifactNotFoundException + String type, String classifier, List remoteRepositories ) + throws ArtifactResolutionException { - // TODO: this is a bit crude - proper type, or proper handling as metadata rather than an artifact in 2.1? - Artifact artifact = artifactFactory.createArtifactWithClassifier( groupId, artifactId, version, type, - classifier ); - - artifactResolver.resolve( artifact, repositories, localRepository ); - - return artifact.getFile(); + org.eclipse.aether.artifact.Artifact artifact2 + = new DefaultArtifact( groupId, artifactId, classifier, null, + version, new DefaultArtifactType( type ) ); + ArtifactRequest artifactRequest = new ArtifactRequest() + .setArtifact( artifact2 ) + .setRepositories( remoteRepositories ); + ArtifactResult result = aetherRepoSystem.resolveArtifact( mavenSession.getRepositorySession(), + artifactRequest ); + + return result.getArtifact().getFile(); } private Map migrateMissingFileKeys( Set missingFileKeys ) diff --git a/src/main/java/org/codehaus/mojo/license/api/DependenciesTool.java b/src/main/java/org/codehaus/mojo/license/api/DependenciesTool.java index 575053b4f..112ef2468 100644 --- a/src/main/java/org/codehaus/mojo/license/api/DependenciesTool.java +++ b/src/main/java/org/codehaus/mojo/license/api/DependenciesTool.java @@ -23,9 +23,7 @@ */ import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.project.MavenProject; -import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; import org.codehaus.mojo.license.utils.MojoHelper; import org.codehaus.plexus.component.annotations.Component; @@ -39,6 +37,12 @@ import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.model.building.ModelBuildingRequest; +import org.apache.maven.project.DefaultProjectBuildingRequest; +import org.apache.maven.project.ProjectBuilder; +import org.apache.maven.project.ProjectBuildingRequest; /** * A tool to deal with dependencies of a project. @@ -61,7 +65,10 @@ public class DependenciesTool * Project builder. */ @Requirement - private MavenProjectBuilder mavenProjectBuilder; + private ProjectBuilder mavenProjectBuilder; + + @Requirement + private MavenSession mavenSession; // CHECKSTYLE_OFF: MethodLength /** @@ -70,17 +77,15 @@ public class DependenciesTool * * Result is given in a map where keys are unique artifact id * - * @param dependencies the project dependencies + * @param artifacts the project dependencies * @param configuration the configuration - * @param localRepository local repository used to resolv dependencies - * @param remoteRepositories remote repositories used to resolv dependencies + * @param remoteRepositories remote repositories used to resolve dependencies * @param cache a optional cache where to keep resolved dependencies * @return the map of resolved dependencies indexed by their unique id. * @see MavenProjectDependenciesConfigurator */ public SortedMap loadProjectDependencies( ResolvedProjectDependencies artifacts, MavenProjectDependenciesConfigurator configuration, - ArtifactRepository localRepository, List remoteRepositories, SortedMap cache ) { @@ -116,6 +121,16 @@ public SortedMap loadProjectDependencies( ResolvedProjectD } final Logger log = getLogger(); + ProjectBuildingRequest projectBuildingRequest + = new DefaultProjectBuildingRequest( mavenSession.getProjectBuildingRequest() ) + .setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL ) + //We already have the relevant part of the dependency tree + //Re-resolving risks including e.g. excluded artifacts + .setResolveDependencies( false ) + //We don't care about plugin licensing + .setProcessPlugins( false ) + .setRemoteRepositories( remoteRepositories ); + for ( Artifact artifact : depArtifacts ) { @@ -163,8 +178,8 @@ public SortedMap loadProjectDependencies( ResolvedProjectD try { - depMavenProject = - mavenProjectBuilder.buildFromRepository( artifact, remoteRepositories, localRepository, true ); + depMavenProject + = mavenProjectBuilder.build( artifact, true, projectBuildingRequest ).getProject(); depMavenProject.getArtifact().setScope( artifact.getScope() ); // In case maven-metadata.xml has different artifactId, groupId or version. diff --git a/src/main/java/org/codehaus/mojo/license/api/ThirdPartyTool.java b/src/main/java/org/codehaus/mojo/license/api/ThirdPartyTool.java index 0731580c2..eb782ee88 100644 --- a/src/main/java/org/codehaus/mojo/license/api/ThirdPartyTool.java +++ b/src/main/java/org/codehaus/mojo/license/api/ThirdPartyTool.java @@ -23,9 +23,6 @@ */ import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.repository.ArtifactRepository; -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.project.MavenProject; @@ -39,6 +36,9 @@ import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; +import org.eclipse.aether.repository.RemoteRepository; +import org.eclipse.aether.resolution.ArtifactResolutionException; +import org.eclipse.aether.transfer.ArtifactNotFoundException; /** * A tool to load third party files missing files. @@ -81,7 +81,6 @@ public interface ThirdPartyTool * @param projects all projects where to read third parties descriptors * @param unsafeProjects all unsafe projects * @param licenseMap license map where to store new licenses - * @param localRepository local repository * @param remoteRepositories remote repositories * @return the map of loaded missing from the remote missing third party files * @throws ThirdPartyToolException if any @@ -91,8 +90,7 @@ SortedProperties loadThirdPartyDescriptorsForUnsafeMapping( Set depend Collection projects, SortedSet unsafeProjects, LicenseMap licenseMap, - ArtifactRepository localRepository, - List remoteRepositories ) + List remoteRepositories ) throws ThirdPartyToolException, IOException; /** @@ -108,20 +106,18 @@ SortedProperties loadThirdPartyDescriptorsForUnsafeMapping( Set depend /** * Obtain the third party file from the repository. *

- * Will first search in the local repository, then into the remote repositories and will resolv it. + * Will first search in the local repository, then into the remote repositories and will resolve it. * * @param project the project - * @param localRepository the local repository - * @param repositories the remote repositories + * @param remoteRepositories the remote repositories * @return the locale file resolved into the local repository * @throws ThirdPartyToolException if any */ - File resolvThirdPartyDescriptor( MavenProject project, ArtifactRepository localRepository, - List repositories ) + File resolvThirdPartyDescriptor( MavenProject project, List remoteRepositories ) throws ThirdPartyToolException; File resolveMissingLicensesDescriptor( String groupId, String artifactId, String version, - ArtifactRepository localRepository, List repositories ) + List remoteRepositories ) throws IOException, ArtifactResolutionException, ArtifactNotFoundException; /** diff --git a/src/main/java/org/codehaus/mojo/license/download/LicensedArtifactResolver.java b/src/main/java/org/codehaus/mojo/license/download/LicensedArtifactResolver.java index 3c15392e3..e1305f95d 100644 --- a/src/main/java/org/codehaus/mojo/license/download/LicensedArtifactResolver.java +++ b/src/main/java/org/codehaus/mojo/license/download/LicensedArtifactResolver.java @@ -29,9 +29,13 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.model.building.ModelBuildingRequest; +import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.MavenProject; -import org.apache.maven.project.MavenProjectBuilder; +import org.apache.maven.project.ProjectBuilder; import org.apache.maven.project.ProjectBuildingException; +import org.apache.maven.project.ProjectBuildingRequest; import org.codehaus.mojo.license.api.ArtifactFilters; import org.codehaus.mojo.license.api.DefaultThirdPartyTool; import org.codehaus.mojo.license.api.MavenProjectDependenciesConfigurator; @@ -63,7 +67,10 @@ public class LicensedArtifactResolver * Project builder. */ @Requirement - private MavenProjectBuilder mavenProjectBuilder; + private ProjectBuilder mavenProjectBuilder; + + @Requirement + private MavenSession mavenSession; // CHECKSTYLE_OFF: MethodLength /** @@ -80,7 +87,6 @@ public class LicensedArtifactResolver */ public void loadProjectDependencies( ResolvedProjectDependencies artifacts, MavenProjectDependenciesConfigurator configuration, - ArtifactRepository localRepository, List remoteRepositories, Map result ) { @@ -108,6 +114,13 @@ public void loadProjectDependencies( ResolvedProjectDependencies artifacts, final Map includeArtifacts = new HashMap<>(); final Logger log = getLogger(); + + ProjectBuildingRequest projectBuildingRequest + = new DefaultProjectBuildingRequest( mavenSession.getProjectBuildingRequest() ) + .setRemoteRepositories( remoteRepositories ) + .setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL ) + .setResolveDependencies( false ) + .setProcessPlugins( false ); for ( Artifact artifact : depArtifacts ) { @@ -154,8 +167,7 @@ public void loadProjectDependencies( ResolvedProjectDependencies artifacts, LicensedArtifact.builder( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() ); try { - final MavenProject project = - mavenProjectBuilder.buildFromRepository( artifact, remoteRepositories, localRepository, true ); + final MavenProject project = mavenProjectBuilder.build( artifact, true, projectBuildingRequest ).getProject(); @SuppressWarnings( "unchecked" ) List lics = project.getLicenses(); if ( lics != null ) @@ -215,5 +227,4 @@ public void loadProjectDependencies( ResolvedProjectDependencies artifacts, } // CHECKSTYLE_ON: MethodLength - }