Skip to content

Commit

Permalink
[MNG-8461] Initial settings method must restore context state (#2004)
Browse files Browse the repository at this point in the history
Effective settings are (should be) created twice, once for "early boot" of Plexus when extensions are loaded up, and then again when Maven "boots".

Bug was that early call "corrupted" (inited settings) in context causing that 2nd required call (due spy) was omitted. This resulted in lack of settings related spy events firing (as we do have IT for spy but it does not test settings events).

---

https://issues.apache.org/jira/browse/MNG-8461
Related: alextu/maven4-reproducer#1
  • Loading branch information
cstamas authored Dec 22, 2024
1 parent 751d3f1 commit bebc3d4
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -501,8 +501,12 @@ protected void settings(C context) throws Exception {
* If there are Maven3 passwords presents in settings, this results in doubled warnings emitted. So Plexus DI
* creation call keeps "emitSettingsWarnings" false. If there are fatal issues, it will anyway "die" at that
* spot before warnings would be emitted.
* <p>
* The method returns a "cleaner" runnable, as during extension loading the context needs to be "cleaned", restored
* to previous state (as it was before extension loading).
*/
protected void settings(C context, boolean emitSettingsWarnings, SettingsBuilder settingsBuilder) throws Exception {
protected Runnable settings(C context, boolean emitSettingsWarnings, SettingsBuilder settingsBuilder)
throws Exception {
Options mavenOptions = context.invokerRequest.options();

Path userSettingsFile = null;
Expand Down Expand Up @@ -612,6 +616,14 @@ protected void settings(C context, boolean emitSettingsWarnings, SettingsBuilder
}
context.logger.info("");
}
return () -> {
context.installationSettingsPath = null;
context.projectSettingsPath = null;
context.userSettingsPath = null;
context.effectiveSettings = null;
context.interactive = true;
context.localRepositoryPath = null;
};
}

protected void customizeSettingsRequest(C context, SettingsBuilderRequest settingsBuilderRequest)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,13 +273,14 @@ protected void configure() {
});

ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
Runnable settingsCleaner = null;
try {
container.setLookupRealm(null);
container.setLoggerManager(createLoggerManager());
container.getLoggerManager().setThresholds(toPlexusLoggingLevel(context.loggerLevel));
Thread.currentThread().setContextClassLoader(container.getContainerRealm());

invoker.settings(context, false, container.lookup(SettingsBuilder.class));
settingsCleaner = invoker.settings(context, false, container.lookup(SettingsBuilder.class));

MavenExecutionRequest mer = new DefaultMavenExecutionRequest();
invoker.populateRequest(context, new DefaultLookup(container), mer);
Expand All @@ -288,6 +289,9 @@ protected void configure() {
.lookup(BootstrapCoreExtensionManager.class)
.loadCoreExtensions(mer, providedArtifacts, extensions));
} finally {
if (settingsCleaner != null) {
settingsCleaner.run();
}
try {
container.dispose();
} finally {
Expand Down

0 comments on commit bebc3d4

Please sign in to comment.