Daemons should not swallow any exception (#969)

The "happy path" should happen without anything thrown, unsure why here runtime ex is rethrown, others swallowed.

Change: just remove the try/catch and make method throw Exception (diff best seen with whitespace ignored).

Fixes #957
Fixes #966
This commit is contained in:
Tamas Cservenak
2024-04-23 10:03:20 +02:00
committed by GitHub
parent 9bafc4b97d
commit a6dbd07ec4
2 changed files with 97 additions and 113 deletions

View File

@@ -717,64 +717,56 @@ public class DaemonMavenCli implements DaemonCli {
} }
private List<CoreExtensionEntry> loadCoreExtensions( private List<CoreExtensionEntry> loadCoreExtensions(
List<CoreExtension> extensions, ClassRealm containerRealm, Set<String> providedArtifacts) { List<CoreExtension> extensions, ClassRealm containerRealm, Set<String> providedArtifacts) throws Exception {
try { if (extensions.isEmpty()) {
if (extensions.isEmpty()) { return Collections.emptyList();
return Collections.emptyList(); }
} ContainerConfiguration cc = new DefaultContainerConfiguration() //
ContainerConfiguration cc = new DefaultContainerConfiguration() // .setClassWorld(classWorld) //
.setClassWorld(classWorld) // .setRealm(containerRealm) //
.setRealm(containerRealm) // .setClassPathScanning(PlexusConstants.SCANNING_INDEX) //
.setClassPathScanning(PlexusConstants.SCANNING_INDEX) // .setAutoWiring(true) //
.setAutoWiring(true) // .setJSR250Lifecycle(true) //
.setJSR250Lifecycle(true) // .setName("maven");
.setName("maven");
DefaultPlexusContainer container = new DefaultPlexusContainer(cc, new AbstractModule() {
DefaultPlexusContainer container = new DefaultPlexusContainer(cc, new AbstractModule() { @Override
@Override protected void configure() {
protected void configure() { bind(ILoggerFactory.class).toInstance(slf4jLoggerFactory);
bind(ILoggerFactory.class).toInstance(slf4jLoggerFactory); }
} });
}); MavenExecutionRequestPopulator executionRequestPopulator = null;
MavenExecutionRequestPopulator executionRequestPopulator = null; try {
try { CliRequest cliRequest = new CliRequest(new String[0], classWorld);
CliRequest cliRequest = new CliRequest(new String[0], classWorld); cliRequest.commandLine = new CommandLine.Builder().build();
cliRequest.commandLine = new CommandLine.Builder().build(); container.setLookupRealm(null);
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); final Map<String, ConfigurationProcessor> configurationProcessors =
final Map<String, ConfigurationProcessor> configurationProcessors = container.lookupMap(ConfigurationProcessor.class);
container.lookupMap(ConfigurationProcessor.class); final EventSpyDispatcher eventSpyDispatcher = container.lookup(EventSpyDispatcher.class);
final EventSpyDispatcher eventSpyDispatcher = container.lookup(EventSpyDispatcher.class); properties(cliRequest);
properties(cliRequest); configure(cliRequest, eventSpyDispatcher, configurationProcessors);
configure(cliRequest, eventSpyDispatcher, configurationProcessors); LoggingExecutionListener executionListener = container.lookup(LoggingExecutionListener.class);
LoggingExecutionListener executionListener = container.lookup(LoggingExecutionListener.class); populateRequest(
populateRequest( cliRequest,
cliRequest, cliRequest.request,
cliRequest.request, slf4jLogger,
slf4jLogger, eventSpyDispatcher,
eventSpyDispatcher, container.lookup(ModelProcessor.class),
container.lookup(ModelProcessor.class), createTransferListener(cliRequest),
createTransferListener(cliRequest), buildEventListener,
buildEventListener, executionListener);
executionListener); executionRequestPopulator.populateDefaults(cliRequest.request);
executionRequestPopulator.populateDefaults(cliRequest.request); BootstrapCoreExtensionManager resolver = container.lookup(BootstrapCoreExtensionManager.class);
BootstrapCoreExtensionManager resolver = container.lookup(BootstrapCoreExtensionManager.class); return Collections.unmodifiableList(
return Collections.unmodifiableList( resolver.loadCoreExtensions(cliRequest.request, providedArtifacts, extensions));
resolver.loadCoreExtensions(cliRequest.request, providedArtifacts, extensions)); } finally {
} finally { executionRequestPopulator = null;
executionRequestPopulator = null; container.dispose();
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) {
slf4jLogger.warn("Failed to load extensions descriptor {}: {}", extensions, e.getMessage());
} }
return Collections.emptyList();
} }
private ClassRealm setupContainerRealm( private ClassRealm setupContainerRealm(

View File

@@ -642,63 +642,55 @@ public class DaemonMavenCli implements DaemonCli {
} }
private List<CoreExtensionEntry> loadCoreExtensions( private List<CoreExtensionEntry> loadCoreExtensions(
List<CoreExtension> extensions, ClassRealm containerRealm, Set<String> providedArtifacts) { List<CoreExtension> extensions, ClassRealm containerRealm, Set<String> providedArtifacts) throws Exception {
try { if (extensions.isEmpty()) {
if (extensions.isEmpty()) { return Collections.emptyList();
return Collections.emptyList(); }
} ContainerConfiguration cc = new DefaultContainerConfiguration() //
ContainerConfiguration cc = new DefaultContainerConfiguration() // .setClassWorld(classWorld) //
.setClassWorld(classWorld) // .setRealm(containerRealm) //
.setRealm(containerRealm) // .setClassPathScanning(PlexusConstants.SCANNING_INDEX) //
.setClassPathScanning(PlexusConstants.SCANNING_INDEX) // .setAutoWiring(true) //
.setAutoWiring(true) // .setJSR250Lifecycle(true) //
.setJSR250Lifecycle(true) // .setName("maven");
.setName("maven");
DefaultPlexusContainer container = new DefaultPlexusContainer(cc, new AbstractModule() {
DefaultPlexusContainer container = new DefaultPlexusContainer(cc, new AbstractModule() { @Override
@Override protected void configure() {
protected void configure() { bind(ILoggerFactory.class).toInstance(slf4jLoggerFactory);
bind(ILoggerFactory.class).toInstance(slf4jLoggerFactory); }
} });
}); MavenExecutionRequestPopulator executionRequestPopulator = null;
MavenExecutionRequestPopulator executionRequestPopulator = null; try {
try { CliRequest cliRequest = new CliRequest(new String[0], classWorld);
CliRequest cliRequest = new CliRequest(new String[0], classWorld); cliRequest.commandLine = new CommandLine.Builder().build();
cliRequest.commandLine = new CommandLine.Builder().build(); container.setLookupRealm(null);
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); final Map<String, ConfigurationProcessor> configurationProcessors =
final Map<String, ConfigurationProcessor> configurationProcessors = container.lookupMap(ConfigurationProcessor.class);
container.lookupMap(ConfigurationProcessor.class); final EventSpyDispatcher eventSpyDispatcher = container.lookup(EventSpyDispatcher.class);
final EventSpyDispatcher eventSpyDispatcher = container.lookup(EventSpyDispatcher.class); properties(cliRequest);
properties(cliRequest); configure(cliRequest, eventSpyDispatcher, configurationProcessors);
configure(cliRequest, eventSpyDispatcher, configurationProcessors); LoggingExecutionListener executionListener = container.lookup(LoggingExecutionListener.class);
LoggingExecutionListener executionListener = container.lookup(LoggingExecutionListener.class); populateRequest(
populateRequest( cliRequest,
cliRequest, cliRequest.request,
cliRequest.request, eventSpyDispatcher,
eventSpyDispatcher, container.lookup(ModelProcessor.class),
container.lookup(ModelProcessor.class), createTransferListener(cliRequest),
createTransferListener(cliRequest), buildEventListener,
buildEventListener, executionListener);
executionListener); executionRequestPopulator.populateDefaults(cliRequest.request);
executionRequestPopulator.populateDefaults(cliRequest.request); BootstrapCoreExtensionManager resolver = container.lookup(BootstrapCoreExtensionManager.class);
BootstrapCoreExtensionManager resolver = container.lookup(BootstrapCoreExtensionManager.class); return Collections.unmodifiableList(
return Collections.unmodifiableList( resolver.loadCoreExtensions(cliRequest.request, providedArtifacts, extensions));
resolver.loadCoreExtensions(cliRequest.request, providedArtifacts, extensions)); } finally {
} finally { executionRequestPopulator = null;
executionRequestPopulator = null; container.dispose();
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) {
slf4jLogger.warn("Failed to load extensions descriptor {}: {}", extensions, e.getMessage());
} }
return Collections.emptyList();
} }
private ClassRealm setupContainerRealm( private ClassRealm setupContainerRealm(