diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/PropertiesLauncher.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/PropertiesLauncher.java index a726dc4f177..c3c97ac0088 100755 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/PropertiesLauncher.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/PropertiesLauncher.java @@ -29,11 +29,9 @@ import java.net.URLDecoder; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; -import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; -import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.jar.Manifest; @@ -531,7 +529,7 @@ public class PropertiesLauncher extends Launcher { private final List classPathArchives; - private final Map jarFileArchives = new LinkedHashMap<>(); + private final List jarFileArchives = new ArrayList<>(); ClassPathArchives() throws Exception { this.classPathArchives = new ArrayList<>(); @@ -666,11 +664,8 @@ public class PropertiesLauncher extends Launcher { } private JarFileArchive getJarFileArchive(File file) throws IOException { - JarFileArchive archive = this.jarFileArchives.get(file); - if (archive == null) { - archive = new JarFileArchive(file); - this.jarFileArchives.put(file, archive); - } + JarFileArchive archive = new JarFileArchive(file); + this.jarFileArchives.add(archive); return archive; } @@ -680,7 +675,7 @@ public class PropertiesLauncher extends Launcher { } void close() throws IOException { - for (JarFileArchive archive : this.jarFileArchives.values()) { + for (JarFileArchive archive : this.jarFileArchives) { archive.close(); } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/PropertiesLauncherTests.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/PropertiesLauncherTests.java index 936783ae64e..e1c33db7e8e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/PropertiesLauncherTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/PropertiesLauncherTests.java @@ -389,6 +389,10 @@ class PropertiesLauncherTests { this.launcher.launch(new String[0]); } catch (Exception ex) { + // Expected ClassNotFoundException + LaunchedURLClassLoader classLoader = (LaunchedURLClassLoader) Thread.currentThread() + .getContextClassLoader(); + classLoader.close(); } URL resource = new URL("jar:" + jarFile.toURI() + "!/nested.jar!/3.dat"); byte[] bytes = FileCopyUtils.copyToByteArray(resource.openStream());