diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java index 19b21735191..871f4c95c2d 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java @@ -40,6 +40,33 @@ public class LaunchedURLClassLoader extends URLClassLoader { super(urls, parent); } + /** + * Attempt to load classes from the URLs before delegating to the parent loader. + */ + @Override + protected Class loadClass(String name, boolean resolve) + throws ClassNotFoundException { + synchronized (getClassLoadingLock(name)) { + Class loadedClass = findLoadedClass(name); + if (loadedClass == null) { + loadedClass = doLoadClass(name); + } + if (resolve) { + resolveClass(loadedClass); + } + return loadedClass; + } + } + + private Class doLoadClass(String name) throws ClassNotFoundException { + try { + return findClass(name); + } + catch (ClassNotFoundException e) { + } + return super.loadClass(name, false); + } + @Override protected Class findClass(final String name) throws ClassNotFoundException { int lastDot = name.lastIndexOf('.'); diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/Launcher.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/Launcher.java index 0f8991a30ca..8ab325434ff 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/Launcher.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/Launcher.java @@ -143,7 +143,7 @@ public abstract class Launcher { * @throws Exception */ protected ClassLoader createClassLoader(URL[] urls) throws Exception { - return new LaunchedURLClassLoader(urls, getClass().getClassLoader().getParent()); + return new LaunchedURLClassLoader(urls, getClass().getClassLoader()); } /**