Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MNG-6326] Make the build fail if core extensions can not be loaded #648

Merged
merged 4 commits into from Jan 7, 2022
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
86 changes: 37 additions & 49 deletions maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
Expand Up @@ -705,6 +705,7 @@ protected void configure()

private List<CoreExtensionEntry> loadCoreExtensions( CliRequest cliRequest, ClassRealm containerRealm,
Set<String> providedArtifacts )
throws Exception
{
if ( cliRequest.multiModuleProjectDirectory == null )
{
Expand All @@ -717,75 +718,62 @@ private List<CoreExtensionEntry> loadCoreExtensions( CliRequest cliRequest, Clas
return Collections.emptyList();
}

try
List<CoreExtension> extensions = readCoreExtensionsDescriptor( extensionsFile );
if ( extensions.isEmpty() )
{
List<CoreExtension> 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() );
gnodet marked this conversation as resolved.
Show resolved Hide resolved
executionRequestPopulator = null;
container.dispose();
}
return Collections.emptyList();
}

private List<CoreExtension> readCoreExtensionsDescriptor( File extensionsFile )
Expand Down