Code review comment: I see, however this works while a message exists in the exception, but some IO exceptions don't carry a message, that's why I suggested it to log the stacktrace too

Code under review:
LocalProject load() throws BootstrapMavenException {
        final AtomicReference<LocalProject> currentProject = new AtomicReference<>();
        final Consumer<Model> processor;
        if (modelBuilder == null) {
            processor = rawModel -> {
                var project = new LocalProject(rawModel, workspace);
                if (currentProject.get() == null && project.getDir().equals(currentProjectPom.getParent())) {
                    currentProject.set(project);
                }
            };
        } else {
            processor = rawModel -> {
                var req = new DefaultModelBuildingRequest();
                req.setPomFile(rawModel.getPomFile());
                req.setModelResolver(modelResolver);
                req.setSystemProperties(System.getProperties());
                req.setUserProperties(System.getProperties());
                req.setModelCache(modelCache);
                req.setActiveProfileIds(activeProfileIds);
                req.setInactiveProfileIds(inactiveProfileIds);
                req.setProfiles(profiles);
                req.setRawModel(rawModel);
                req.setWorkspaceModelResolver(this);
                LocalProject project = null;
                try {
                    project = new LocalProject(modelBuilder.build(req), workspace);
                } catch (Exception e) {
                    if (warnOnFailingWsModules) {
                        log.warn("Failed to resolve effective model for " + rawModel.getPomFile() + ": " + e);
                        return;
                    }
                    throw new RuntimeException("Failed to resolve the effective model for " + rawModel.getPomFile(), e);
                }
                if (currentProject.get() == null && project.getDir().equals(currentProjectPom.getParent())) {
                    currentProject.set(project);
                }
                for (var module : project.getModelBuildingResult().getEffectiveModel().getModules()) {
                    addModulePom(project.getDir().resolve(module).resolve(POM_XML));
                }
            };
        }

        int i = 0;
        while (i < moduleQueue.size()) {
            var newModules = new ArrayList<RawModule>();
            while (i < moduleQueue.size()) {
                loadModule(moduleQueue.get(i++), newModules);
            }
            for (var newModule : newModules) {
                newModule.process(processor);
            }
        }

        if (currentProject.get() == null) {
            throw new BootstrapMavenException("Failed to load project " + currentProjectPom);
        }
        return currentProject.get();
    }

Line commented on: log.warn("Failed to resolve effective model for " + rawModel.getPomFile() + ": " + e);

Revised code:
LocalProject load() throws BootstrapMavenException {
        final AtomicReference<LocalProject> currentProject = new AtomicReference<>();
        final Consumer<Model> processor;
        if (modelBuilder == null) {
            processor = rawModel -> {
                var project = new LocalProject(rawModel, workspace);
                if (currentProject.get() == null && project.getDir().equals(currentProjectPom.getParent())) {
                    currentProject.set(project);
                }
            };
        } else {
            processor = rawModel -> {
                var req = new DefaultModelBuildingRequest();
                req.setPomFile(rawModel.getPomFile());
                req.setModelResolver(modelResolver);
                req.setSystemProperties(System.getProperties());
                req.setUserProperties(System.getProperties());
                req.setModelCache(modelCache);
                req.setActiveProfileIds(activeProfileIds);
                req.setInactiveProfileIds(inactiveProfileIds);
                req.setProfiles(profiles);
                req.setRawModel(rawModel);
                req.setWorkspaceModelResolver(this);
                LocalProject project = null;
                try {
                    project = new LocalProject(modelBuilder.build(req), workspace);
                } catch (Exception e) {
                    if (warnOnFailingWsModules) {
                        log.warn("Failed to resolve effective model for " + rawModel.getPomFile(), e);
                        return;
                    }
                    throw new RuntimeException("Failed to resolve the effective model for " + rawModel.getPomFile(), e);
                }
                if (currentProject.get() == null && project.getDir().equals(currentProjectPom.getParent())) {
                    currentProject.set(project);
                }
                for (var module : project.getModelBuildingResult().getEffectiveModel().getModules()) {
                    addModulePom(project.getDir().resolve(module).resolve(POM_XML));
                }
            };
        }

        int i = 0;
        while (i < moduleQueue.size()) {
            var newModules = new ArrayList<RawModule>();
            while (i < moduleQueue.size()) {
                loadModule(moduleQueue.get(i++), newModules);
            }
            for (var newModule : newModules) {
                newModule.process(processor);
            }
        }

        if (currentProject.get() == null) {
            throw new BootstrapMavenException("Failed to load project " + currentProjectPom);
        }
        return currentProject.get();
    }