Before, a spring boot application that used PropertiesLauncher (archived by spring boot maven plugin with ZIP layout) can load a resource via the url just like "jar:file:/var/lib/application.jar!/BOOT-INF/classes!/application.yml" returned by Application.class.getResource("/application.yml") .

Since upgrade to spring-boot v2.3.0, it doesn't work any more, dig in code, finding is:

In Launcher.java, The spring-boot url protocol handler is registered only if is exploded, and isExploded() return true by default.

    protected void launch(String[] args) throws Exception {
        if (!isExploded()) {
            JarFile.registerUrlProtocolHandler();
        }
        ...
    }
    ...
    protected boolean isExploded() {
        return true;
    }

and PropertiesLauncher inherit Launcher without overriding isExploded(), so the application fail to load in non-exploded mode.

Is that on purpose? Does not PropertiesLauncher support non-exploded mode in v2.3.0? Or maybe similar to ExecutableArchiveLauncher, PropertiesLauncher should override isExploded() and return true or false based on archive is exploded or not.

    @Override
    protected boolean isExploded() {
        return this.archive.isExploded();
    }

Comment From: wilkinsona

@jianshaow Thanks for the report. I think this was an accidental change in behaviour. PropertiesLauncher should still support being run from an archive (non-exploded) in 2.3.

Comment From: wilkinsona

loadResourceFromJarFile is failing on Windows as it appears to be leaving a file open, preventing it from being deleted.

Comment From: philwebb

The Windows build is green again.