From f7c13bd6703959fe108eef637958b3e093e849e0 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 4 Jan 2022 16:55:09 +0100 Subject: [PATCH 1/4] [MNG-6326] Make the build fail if core extensions can not be loaded --- .../java/org/apache/maven/cli/MavenCli.java | 86 ++++++++----------- 1 file changed, 37 insertions(+), 49 deletions(-) diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java index fbcb05f9137..ed695ebbf20 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java @@ -705,6 +705,7 @@ protected void configure() private List loadCoreExtensions( CliRequest cliRequest, ClassRealm containerRealm, Set providedArtifacts ) + throws Exception { if ( cliRequest.multiModuleProjectDirectory == null ) { @@ -717,75 +718,62 @@ private List loadCoreExtensions( CliRequest cliRequest, Clas return Collections.emptyList(); } - try + List extensions = readCoreExtensionsDescriptor( extensionsFile ); + if ( extensions.isEmpty() ) { - List extensions = readCoreExtensionsDescriptor( extensionsFile ); - if ( extensions.isEmpty() ) - { - return Collections.emptyList(); - } + return Collections.emptyList(); + } - ContainerConfiguration cc = new DefaultContainerConfiguration() // - .setClassWorld( cliRequest.classWorld ) // - .setRealm( containerRealm ) // - .setClassPathScanning( PlexusConstants.SCANNING_INDEX ) // - .setAutoWiring( true ) // - .setJSR250Lifecycle( true ) // - .setName( "maven" ); + ContainerConfiguration cc = new DefaultContainerConfiguration() // + .setClassWorld( cliRequest.classWorld ) // + .setRealm( containerRealm ) // + .setClassPathScanning( PlexusConstants.SCANNING_INDEX ) // + .setAutoWiring( true ) // + .setJSR250Lifecycle( true ) // + .setName( "maven" ); - DefaultPlexusContainer container = new DefaultPlexusContainer( cc, new AbstractModule() + DefaultPlexusContainer container = new DefaultPlexusContainer( cc, new AbstractModule() + { + @Override + protected void configure() { - @Override - protected void configure() - { - bind( ILoggerFactory.class ).toInstance( slf4jLoggerFactory ); - } - } ); + bind( ILoggerFactory.class ).toInstance( slf4jLoggerFactory ); + } + } ); - try - { - container.setLookupRealm( null ); + try + { + container.setLookupRealm( null ); - container.setLoggerManager( plexusLoggerManager ); + container.setLoggerManager( plexusLoggerManager ); - container.getLoggerManager().setThresholds( cliRequest.request.getLoggingLevel() ); + container.getLoggerManager().setThresholds( cliRequest.request.getLoggingLevel() ); - Thread.currentThread().setContextClassLoader( container.getContainerRealm() ); + Thread.currentThread().setContextClassLoader( container.getContainerRealm() ); - executionRequestPopulator = container.lookup( MavenExecutionRequestPopulator.class ); + executionRequestPopulator = container.lookup( MavenExecutionRequestPopulator.class ); - configurationProcessors = container.lookupMap( ConfigurationProcessor.class ); + configurationProcessors = container.lookupMap( ConfigurationProcessor.class ); - configure( cliRequest ); + configure( cliRequest ); - MavenExecutionRequest request = DefaultMavenExecutionRequest.copy( cliRequest.request ); + MavenExecutionRequest request = DefaultMavenExecutionRequest.copy( cliRequest.request ); - request = populateRequest( cliRequest, request ); + request = populateRequest( cliRequest, request ); - request = executionRequestPopulator.populateDefaults( request ); + request = executionRequestPopulator.populateDefaults( request ); - BootstrapCoreExtensionManager resolver = container.lookup( BootstrapCoreExtensionManager.class ); + BootstrapCoreExtensionManager resolver = container.lookup( BootstrapCoreExtensionManager.class ); - return Collections.unmodifiableList( resolver.loadCoreExtensions( request, providedArtifacts, - extensions ) ); + return Collections.unmodifiableList( resolver.loadCoreExtensions( request, providedArtifacts, + extensions ) ); - } - finally - { - executionRequestPopulator = null; - container.dispose(); - } - } - catch ( RuntimeException e ) - { - // runtime exceptions are most likely bugs in maven, let them bubble up to the user - throw e; } - catch ( Exception e ) + finally { - slf4jLogger.warn( "Failed to read extensions descriptor {}: {}", extensionsFile, e.getMessage() ); + executionRequestPopulator = null; + container.dispose(); } - return Collections.emptyList(); } private List readCoreExtensionsDescriptor( File extensionsFile ) From aff754b43bf655daa9a6cb9e19b976c633786bb8 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 6 Jan 2022 10:05:31 +0100 Subject: [PATCH 2/4] Add a specific exception --- .../BootstrapCoreExtensionManager.java | 34 +++++++---- .../ExtensionResolutionException.java | 59 +++++++++++++++++++ 2 files changed, 80 insertions(+), 13 deletions(-) create mode 100644 maven-embedder/src/main/java/org/apache/maven/cli/internal/ExtensionResolutionException.java diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java index 9fada05db83..2d3b2333f9d 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java @@ -128,19 +128,27 @@ private CoreExtensionEntry createExtension( CoreExtension extension, List resolveExtension( CoreExtension extension, RepositorySystemSession repoSession, List repositories, DependencyFilter dependencyFilter ) - throws PluginResolutionException + throws ExtensionResolutionException { - Plugin plugin = new Plugin(); - plugin.setGroupId( extension.getGroupId() ); - plugin.setArtifactId( extension.getArtifactId() ); - plugin.setVersion( extension.getVersion() ); - - DependencyNode root = - pluginDependenciesResolver.resolveCoreExtension( plugin, dependencyFilter, repositories, repoSession ); - PreorderNodeListGenerator nlg = new PreorderNodeListGenerator(); - root.accept( nlg ); - List artifacts = nlg.getArtifacts( false ); - - return artifacts; + try + { + Plugin plugin = new Plugin(); + plugin.setGroupId( extension.getGroupId() ); + plugin.setArtifactId( extension.getArtifactId() ); + plugin.setVersion( extension.getVersion() ); + + DependencyNode root = pluginDependenciesResolver + .resolveCoreExtension( plugin, dependencyFilter, repositories, repoSession ); + PreorderNodeListGenerator nlg = new PreorderNodeListGenerator(); + root.accept( nlg ); + List artifacts = nlg.getArtifacts( false ); + + return artifacts; + } + catch ( PluginResolutionException e ) + { + throw new ExtensionResolutionException( extension, e.getCause() ); + } } + } diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/internal/ExtensionResolutionException.java b/maven-embedder/src/main/java/org/apache/maven/cli/internal/ExtensionResolutionException.java new file mode 100644 index 00000000000..900abc84644 --- /dev/null +++ b/maven-embedder/src/main/java/org/apache/maven/cli/internal/ExtensionResolutionException.java @@ -0,0 +1,59 @@ +package org.apache.maven.cli.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.apache.maven.cli.internal.extension.model.CoreExtension; + +/** + * Exception occurring trying to resolve a plugin. + * + * @author Brett Porter + */ +public class ExtensionResolutionException + extends Exception +{ + + private final CoreExtension extension; + + public ExtensionResolutionException( CoreExtension extension, Throwable cause ) + { + super( "Extension " + getId( extension ) + " or one of its dependencies could not be resolved: " + + cause.getMessage(), cause ); + this.extension = extension; + } + + public CoreExtension getExtension() + { + return extension; + } + + public static String getId( CoreExtension extension ) + { + StringBuilder id = new StringBuilder( 128 ); + + id.append( ( extension.getGroupId() == null ) ? "[unknown-group-id]" : extension.getGroupId() ); + id.append( ":" ); + id.append( ( extension.getArtifactId() == null ) ? "[unknown-artifact-id]" : extension.getArtifactId() ); + id.append( ":" ); + id.append( ( extension.getVersion() == null ) ? "[unknown-version]" : extension.getVersion() ); + + return id.toString(); + } +} From 56354e0b9a97423a95326ece6fe16affb0526be5 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 6 Jan 2022 21:11:42 +0100 Subject: [PATCH 3/4] Add a TODO --- .../maven/cli/internal/BootstrapCoreExtensionManager.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java index 2d3b2333f9d..a47326977d0 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java @@ -132,6 +132,9 @@ private List resolveExtension( CoreExtension extension, RepositorySyst { try { + // TODO: enhance the PluginDependenciesResolver to provide a + // TODO: resolveCoreExtension method which uses a CoreExtension + // TODO: object instead of a Plugin as this makes no sense Plugin plugin = new Plugin(); plugin.setGroupId( extension.getGroupId() ); plugin.setArtifactId( extension.getArtifactId() ); From 7788b0c4f8c69da86308291599537887c89e5726 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Thu, 6 Jan 2022 23:44:32 +0100 Subject: [PATCH 4/4] Move the getId() in the CoreExtension object --- .../ExtensionResolutionException.java | 14 +--------- .../src/main/mdo/core-extensions.mdo | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/internal/ExtensionResolutionException.java b/maven-embedder/src/main/java/org/apache/maven/cli/internal/ExtensionResolutionException.java index 900abc84644..4f8cff9cb34 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/internal/ExtensionResolutionException.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/internal/ExtensionResolutionException.java @@ -34,7 +34,7 @@ public class ExtensionResolutionException public ExtensionResolutionException( CoreExtension extension, Throwable cause ) { - super( "Extension " + getId( extension ) + " or one of its dependencies could not be resolved: " + super( "Extension " + extension.getId() + " or one of its dependencies could not be resolved: " + cause.getMessage(), cause ); this.extension = extension; } @@ -44,16 +44,4 @@ public CoreExtension getExtension() return extension; } - public static String getId( CoreExtension extension ) - { - StringBuilder id = new StringBuilder( 128 ); - - id.append( ( extension.getGroupId() == null ) ? "[unknown-group-id]" : extension.getGroupId() ); - id.append( ":" ); - id.append( ( extension.getArtifactId() == null ) ? "[unknown-artifact-id]" : extension.getArtifactId() ); - id.append( ":" ); - id.append( ( extension.getVersion() == null ) ? "[unknown-version]" : extension.getVersion() ); - - return id.toString(); - } } diff --git a/maven-embedder/src/main/mdo/core-extensions.mdo b/maven-embedder/src/main/mdo/core-extensions.mdo index e523d5abf32..8a74aabb585 100644 --- a/maven-embedder/src/main/mdo/core-extensions.mdo +++ b/maven-embedder/src/main/mdo/core-extensions.mdo @@ -83,6 +83,32 @@ String + + + 1.0.0+ + + ::}, never {@code null}. + */ + public String getId() + { + StringBuilder id = new StringBuilder( 128 ); + + id.append( ( getGroupId() == null ) ? "[unknown-group-id]" : getGroupId() ); + id.append( ":" ); + id.append( ( getArtifactId() == null ) ? "[unknown-artifact-id]" : getArtifactId() ); + id.append( ":" ); + id.append( ( getVersion() == null ) ? "[unknown-version]" : getVersion() ); + + return id.toString(); + } + ]]> + + +