From a6dbd07ec44f0a50833699e461be49d79d4c6fed Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Tue, 23 Apr 2024 10:03:20 +0200 Subject: [PATCH] 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 --- .../org/apache/maven/cli/DaemonMavenCli.java | 104 ++++++++---------- .../org/apache/maven/cli/DaemonMavenCli.java | 102 ++++++++--------- 2 files changed, 95 insertions(+), 111 deletions(-) diff --git a/daemon-m39/src/main/java/org/apache/maven/cli/DaemonMavenCli.java b/daemon-m39/src/main/java/org/apache/maven/cli/DaemonMavenCli.java index 8029e80e6..142e1fa8c 100644 --- a/daemon-m39/src/main/java/org/apache/maven/cli/DaemonMavenCli.java +++ b/daemon-m39/src/main/java/org/apache/maven/cli/DaemonMavenCli.java @@ -717,64 +717,56 @@ protected void configure() { } private List loadCoreExtensions( - List extensions, ClassRealm containerRealm, Set providedArtifacts) { - try { - if (extensions.isEmpty()) { - return Collections.emptyList(); - } - ContainerConfiguration cc = new DefaultContainerConfiguration() // - .setClassWorld(classWorld) // - .setRealm(containerRealm) // - .setClassPathScanning(PlexusConstants.SCANNING_INDEX) // - .setAutoWiring(true) // - .setJSR250Lifecycle(true) // - .setName("maven"); - - DefaultPlexusContainer container = new DefaultPlexusContainer(cc, new AbstractModule() { - @Override - protected void configure() { - bind(ILoggerFactory.class).toInstance(slf4jLoggerFactory); - } - }); - MavenExecutionRequestPopulator executionRequestPopulator = null; - try { - CliRequest cliRequest = new CliRequest(new String[0], classWorld); - cliRequest.commandLine = new CommandLine.Builder().build(); - container.setLookupRealm(null); - container.setLoggerManager(plexusLoggerManager); - container.getLoggerManager().setThresholds(cliRequest.request.getLoggingLevel()); - Thread.currentThread().setContextClassLoader(container.getContainerRealm()); - executionRequestPopulator = container.lookup(MavenExecutionRequestPopulator.class); - final Map configurationProcessors = - container.lookupMap(ConfigurationProcessor.class); - final EventSpyDispatcher eventSpyDispatcher = container.lookup(EventSpyDispatcher.class); - properties(cliRequest); - configure(cliRequest, eventSpyDispatcher, configurationProcessors); - LoggingExecutionListener executionListener = container.lookup(LoggingExecutionListener.class); - populateRequest( - cliRequest, - cliRequest.request, - slf4jLogger, - eventSpyDispatcher, - container.lookup(ModelProcessor.class), - createTransferListener(cliRequest), - buildEventListener, - executionListener); - executionRequestPopulator.populateDefaults(cliRequest.request); - BootstrapCoreExtensionManager resolver = container.lookup(BootstrapCoreExtensionManager.class); - return Collections.unmodifiableList( - resolver.loadCoreExtensions(cliRequest.request, providedArtifacts, extensions)); - } finally { - executionRequestPopulator = null; - container.dispose(); + List extensions, ClassRealm containerRealm, Set providedArtifacts) throws Exception { + if (extensions.isEmpty()) { + return Collections.emptyList(); + } + ContainerConfiguration cc = new DefaultContainerConfiguration() // + .setClassWorld(classWorld) // + .setRealm(containerRealm) // + .setClassPathScanning(PlexusConstants.SCANNING_INDEX) // + .setAutoWiring(true) // + .setJSR250Lifecycle(true) // + .setName("maven"); + + DefaultPlexusContainer container = new DefaultPlexusContainer(cc, new AbstractModule() { + @Override + protected void configure() { + bind(ILoggerFactory.class).toInstance(slf4jLoggerFactory); } - } 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()); + }); + MavenExecutionRequestPopulator executionRequestPopulator = null; + try { + CliRequest cliRequest = new CliRequest(new String[0], classWorld); + cliRequest.commandLine = new CommandLine.Builder().build(); + container.setLookupRealm(null); + container.setLoggerManager(plexusLoggerManager); + container.getLoggerManager().setThresholds(cliRequest.request.getLoggingLevel()); + Thread.currentThread().setContextClassLoader(container.getContainerRealm()); + executionRequestPopulator = container.lookup(MavenExecutionRequestPopulator.class); + final Map configurationProcessors = + container.lookupMap(ConfigurationProcessor.class); + final EventSpyDispatcher eventSpyDispatcher = container.lookup(EventSpyDispatcher.class); + properties(cliRequest); + configure(cliRequest, eventSpyDispatcher, configurationProcessors); + LoggingExecutionListener executionListener = container.lookup(LoggingExecutionListener.class); + populateRequest( + cliRequest, + cliRequest.request, + slf4jLogger, + eventSpyDispatcher, + container.lookup(ModelProcessor.class), + createTransferListener(cliRequest), + buildEventListener, + executionListener); + executionRequestPopulator.populateDefaults(cliRequest.request); + BootstrapCoreExtensionManager resolver = container.lookup(BootstrapCoreExtensionManager.class); + return Collections.unmodifiableList( + resolver.loadCoreExtensions(cliRequest.request, providedArtifacts, extensions)); + } finally { + executionRequestPopulator = null; + container.dispose(); } - return Collections.emptyList(); } private ClassRealm setupContainerRealm( diff --git a/daemon-m40/src/main/java/org/apache/maven/cli/DaemonMavenCli.java b/daemon-m40/src/main/java/org/apache/maven/cli/DaemonMavenCli.java index 9b6e592d4..e74404225 100644 --- a/daemon-m40/src/main/java/org/apache/maven/cli/DaemonMavenCli.java +++ b/daemon-m40/src/main/java/org/apache/maven/cli/DaemonMavenCli.java @@ -642,63 +642,55 @@ public Object getValue(String expression) { } private List loadCoreExtensions( - List extensions, ClassRealm containerRealm, Set providedArtifacts) { - try { - if (extensions.isEmpty()) { - return Collections.emptyList(); - } - ContainerConfiguration cc = new DefaultContainerConfiguration() // - .setClassWorld(classWorld) // - .setRealm(containerRealm) // - .setClassPathScanning(PlexusConstants.SCANNING_INDEX) // - .setAutoWiring(true) // - .setJSR250Lifecycle(true) // - .setName("maven"); - - DefaultPlexusContainer container = new DefaultPlexusContainer(cc, new AbstractModule() { - @Override - protected void configure() { - bind(ILoggerFactory.class).toInstance(slf4jLoggerFactory); - } - }); - MavenExecutionRequestPopulator executionRequestPopulator = null; - try { - CliRequest cliRequest = new CliRequest(new String[0], classWorld); - cliRequest.commandLine = new CommandLine.Builder().build(); - container.setLookupRealm(null); - container.setLoggerManager(plexusLoggerManager); - container.getLoggerManager().setThresholds(cliRequest.request.getLoggingLevel()); - Thread.currentThread().setContextClassLoader(container.getContainerRealm()); - executionRequestPopulator = container.lookup(MavenExecutionRequestPopulator.class); - final Map configurationProcessors = - container.lookupMap(ConfigurationProcessor.class); - final EventSpyDispatcher eventSpyDispatcher = container.lookup(EventSpyDispatcher.class); - properties(cliRequest); - configure(cliRequest, eventSpyDispatcher, configurationProcessors); - LoggingExecutionListener executionListener = container.lookup(LoggingExecutionListener.class); - populateRequest( - cliRequest, - cliRequest.request, - eventSpyDispatcher, - container.lookup(ModelProcessor.class), - createTransferListener(cliRequest), - buildEventListener, - executionListener); - executionRequestPopulator.populateDefaults(cliRequest.request); - BootstrapCoreExtensionManager resolver = container.lookup(BootstrapCoreExtensionManager.class); - return Collections.unmodifiableList( - resolver.loadCoreExtensions(cliRequest.request, providedArtifacts, extensions)); - } finally { - executionRequestPopulator = null; - container.dispose(); + List extensions, ClassRealm containerRealm, Set providedArtifacts) throws Exception { + if (extensions.isEmpty()) { + return Collections.emptyList(); + } + ContainerConfiguration cc = new DefaultContainerConfiguration() // + .setClassWorld(classWorld) // + .setRealm(containerRealm) // + .setClassPathScanning(PlexusConstants.SCANNING_INDEX) // + .setAutoWiring(true) // + .setJSR250Lifecycle(true) // + .setName("maven"); + + DefaultPlexusContainer container = new DefaultPlexusContainer(cc, new AbstractModule() { + @Override + protected void configure() { + bind(ILoggerFactory.class).toInstance(slf4jLoggerFactory); } - } 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()); + }); + MavenExecutionRequestPopulator executionRequestPopulator = null; + try { + CliRequest cliRequest = new CliRequest(new String[0], classWorld); + cliRequest.commandLine = new CommandLine.Builder().build(); + container.setLookupRealm(null); + container.setLoggerManager(plexusLoggerManager); + container.getLoggerManager().setThresholds(cliRequest.request.getLoggingLevel()); + Thread.currentThread().setContextClassLoader(container.getContainerRealm()); + executionRequestPopulator = container.lookup(MavenExecutionRequestPopulator.class); + final Map configurationProcessors = + container.lookupMap(ConfigurationProcessor.class); + final EventSpyDispatcher eventSpyDispatcher = container.lookup(EventSpyDispatcher.class); + properties(cliRequest); + configure(cliRequest, eventSpyDispatcher, configurationProcessors); + LoggingExecutionListener executionListener = container.lookup(LoggingExecutionListener.class); + populateRequest( + cliRequest, + cliRequest.request, + eventSpyDispatcher, + container.lookup(ModelProcessor.class), + createTransferListener(cliRequest), + buildEventListener, + executionListener); + executionRequestPopulator.populateDefaults(cliRequest.request); + BootstrapCoreExtensionManager resolver = container.lookup(BootstrapCoreExtensionManager.class); + return Collections.unmodifiableList( + resolver.loadCoreExtensions(cliRequest.request, providedArtifacts, extensions)); + } finally { + executionRequestPopulator = null; + container.dispose(); } - return Collections.emptyList(); } private ClassRealm setupContainerRealm(