[MNG-6965] Extensions suddenly have org.codehaus.plexus:plexus-utils:jar:1.1 on their classpath

This closes #367
This commit is contained in:
Sylwester Lachiewicz 2020-07-24 01:59:50 +02:00 committed by Michael Osipov
parent b3e7e57e4b
commit e4f347ed85
3 changed files with 5 additions and 99 deletions

View File

@ -41,7 +41,6 @@ import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.collection.CollectRequest;
import org.eclipse.aether.collection.DependencyCollectionException;
import org.eclipse.aether.collection.DependencyGraphTransformer;
import org.eclipse.aether.collection.DependencySelector;
import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.graph.DependencyNode;
@ -59,7 +58,6 @@ import org.eclipse.aether.util.filter.AndDependencyFilter;
import org.eclipse.aether.util.filter.ScopeDependencyFilter;
import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
import org.eclipse.aether.util.graph.selector.AndDependencySelector;
import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy;
/**
@ -154,7 +152,7 @@ public class DefaultPluginDependenciesResolver
List<RemoteRepository> repositories, RepositorySystemSession session )
throws PluginResolutionException
{
return resolveInternal( plugin, null /* pluginArtifact */, dependencyFilter, null /* transformer */,
return resolveInternal( plugin, null /* pluginArtifact */, dependencyFilter,
repositories, session );
}
@ -162,12 +160,11 @@ public class DefaultPluginDependenciesResolver
List<RemoteRepository> repositories, RepositorySystemSession session )
throws PluginResolutionException
{
return resolveInternal( plugin, pluginArtifact, dependencyFilter, new PlexusUtilsInjector(), repositories,
return resolveInternal( plugin, pluginArtifact, dependencyFilter, repositories,
session );
}
private DependencyNode resolveInternal( Plugin plugin, Artifact pluginArtifact, DependencyFilter dependencyFilter,
DependencyGraphTransformer transformer,
List<RemoteRepository> repositories, RepositorySystemSession session )
throws PluginResolutionException
{
@ -188,12 +185,9 @@ public class DefaultPluginDependenciesResolver
DependencySelector selector =
AndDependencySelector.newInstance( session.getDependencySelector(), new WagonExcluder() );
transformer =
ChainedDependencyGraphTransformer.newInstance( session.getDependencyGraphTransformer(), transformer );
DefaultRepositorySystemSession pluginSession = new DefaultRepositorySystemSession( session );
pluginSession.setDependencySelector( selector );
pluginSession.setDependencyGraphTransformer( transformer );
pluginSession.setDependencyGraphTransformer( session.getDependencyGraphTransformer() );
CollectRequest request = new CollectRequest();
request.setRequestContext( REPOSITORY_CONTEXT );

View File

@ -1,87 +0,0 @@
package org.apache.maven.plugin.internal;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.eclipse.aether.RepositoryException;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.collection.DependencyGraphTransformationContext;
import org.eclipse.aether.collection.DependencyGraphTransformer;
import org.eclipse.aether.graph.DefaultDependencyNode;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.graph.DependencyNode;
import org.eclipse.aether.util.artifact.JavaScopes;
/**
* Injects plexus-utils:1.1 into a plugin's class path if it doesn't already declare a dependency on plexus-utils. This
* is another legacy bit to provide backward-compat with Maven 2.x.
*
* @author Benjamin Bentmann
*/
class PlexusUtilsInjector
implements DependencyGraphTransformer
{
private static final String GID = "org.codehaus.plexus";
private static final String AID = "plexus-utils";
private static final String VER = "1.1";
private static final String EXT = "jar";
public DependencyNode transformGraph( DependencyNode node, DependencyGraphTransformationContext context )
throws RepositoryException
{
if ( findPlexusUtils( node ) == null )
{
Artifact pu = new DefaultArtifact( GID, AID, null, EXT, VER );
DefaultDependencyNode child = new DefaultDependencyNode( new Dependency( pu, JavaScopes.RUNTIME ) );
child.setRepositories( node.getRepositories() );
child.setRequestContext( node.getRequestContext() );
node.getChildren().add( child );
}
return node;
}
private DependencyNode findPlexusUtils( DependencyNode node )
{
Artifact artifact = node.getDependency().getArtifact();
if ( AID.equals( artifact.getArtifactId() ) && GID.equals( artifact.getGroupId() )
&& EXT.equals( artifact.getExtension() ) && "".equals( artifact.getClassifier() ) )
{
return node;
}
for ( DependencyNode child : node.getChildren() )
{
DependencyNode result = findPlexusUtils( child );
if ( result != null )
{
return result;
}
}
return null;
}
}

View File

@ -207,15 +207,14 @@ public class DefaultProjectBuildingHelper
exportedArtifacts.put( extensionRealm, extensionDescriptor.getExportedArtifacts() );
}
if ( !plugin.isExtensions() && artifacts.size() == 2 && artifacts.get( 0 ).getFile() != null
&& "plexus-utils".equals( artifacts.get( 1 ).getArtifactId() ) )
if ( !plugin.isExtensions() && artifacts.size() == 1 && artifacts.get( 0 ).getFile() != null )
{
/*
* This is purely for backward-compat with 2.x where <extensions> consisting of a single artifact where
* loaded into the core and hence available to plugins, in contrast to bigger extensions that were
* loaded into a dedicated realm which is invisible to plugins (MNG-2749).
*/
publicArtifacts.add( artifacts.get( 0 ) );
publicArtifacts.addAll( artifacts );
}
}