mirror of
https://github.com/apache/maven-mvnd.git
synced 2025-09-23 21:02:48 +00:00
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:
@@ -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(
|
||||||
|
@@ -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(
|
||||||
|
Reference in New Issue
Block a user