diff --git a/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java b/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java index 38e117ff82..69ee04a9d4 100644 --- a/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java +++ b/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java @@ -83,6 +83,12 @@ public class DefaultClassRealmManager private final ClassRealm mavenApiRealm; + /** + * Patterns of artifacts provided by maven core and exported via maven api realm. These artifacts are filtered from + * plugin and build extensions realms to avoid presence of duplicate and possibly conflicting classes on classpath. + */ + private final Set providedArtifacts; + @Inject public DefaultClassRealmManager( Logger logger, PlexusContainer container, List delegates, CoreExportsProvider exports ) @@ -97,6 +103,8 @@ public DefaultClassRealmManager( Logger logger, PlexusContainer container, this.mavenApiRealm = createRealm( API_REALMID, RealmType.Core, null /* parent */, null /* parentImports */, foreignImports, null /* artifacts */ ); + + this.providedArtifacts = exports.get().getExportedArtifacts(); } private ClassRealm newRealm( String id ) @@ -156,10 +164,13 @@ private ClassRealm createRealm( String baseRealmId, RealmType type, ClassLoader { for ( Artifact artifact : artifacts ) { - artifactIds.add( getId( artifact ) ); - if ( artifact.getFile() != null ) + if ( !isProvidedArtifact( artifact ) ) { - constituents.add( new ArtifactClassRealmConstituent( artifact ) ); + artifactIds.add( getId( artifact ) ); + if ( artifact.getFile() != null ) + { + constituents.add( new ArtifactClassRealmConstituent( artifact ) ); + } } } } @@ -245,6 +256,11 @@ public ClassRealm createExtensionRealm( Plugin plugin, List artifacts return createRealm( getKey( plugin, true ), RealmType.Extension, parent, null, foreignImports, artifacts ); } + private boolean isProvidedArtifact( Artifact artifact ) + { + return providedArtifacts.contains( artifact.getGroupId() + ":" + artifact.getArtifactId() ); + } + public ClassRealm createPluginRealm( Plugin plugin, ClassLoader parent, List parentImports, Map foreignImports, List artifacts ) { diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java index 9a9a7b8d84..5b0c271235 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java @@ -23,7 +23,6 @@ import java.util.List; import java.util.Map; -import org.apache.maven.ArtifactFilterManager; import org.apache.maven.RepositoryUtils; import org.apache.maven.model.Dependency; import org.apache.maven.model.Plugin; @@ -54,7 +53,6 @@ import org.eclipse.aether.resolution.DependencyResolutionException; import org.eclipse.aether.util.artifact.JavaScopes; import org.eclipse.aether.util.filter.AndDependencyFilter; -import org.eclipse.aether.util.filter.ExclusionsDependencyFilter; import org.eclipse.aether.util.filter.ScopeDependencyFilter; import org.eclipse.aether.util.graph.selector.AndDependencySelector; import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer; @@ -78,9 +76,6 @@ public class DefaultPluginDependenciesResolver @Requirement private Logger logger; - @Requirement - private ArtifactFilterManager artifactFilterManager; - @Requirement private RepositorySystem repoSystem; @@ -151,10 +146,7 @@ public DependencyNode resolve( Plugin plugin, Artifact pluginArtifact, Dependenc List repositories, RepositorySystemSession session ) throws PluginResolutionException { - DependencyFilter resolutionFilter = - new ExclusionsDependencyFilter( artifactFilterManager.getCoreArtifactExcludes() ); - resolutionFilter = AndDependencyFilter.newInstance( resolutionFilter, dependencyFilter ); - return resolveInternal( plugin, pluginArtifact, resolutionFilter, new PlexusUtilsInjector(), repositories, + return resolveInternal( plugin, pluginArtifact, dependencyFilter, new PlexusUtilsInjector(), repositories, session ); }