diff --git a/src/main/java/io/xjar/boot/XExtLauncher.java b/src/main/java/io/xjar/boot/XExtLauncher.java index 2ba107e..a92ea1f 100644 --- a/src/main/java/io/xjar/boot/XExtLauncher.java +++ b/src/main/java/io/xjar/boot/XExtLauncher.java @@ -29,10 +29,20 @@ public void launch() throws Exception { launch(xLauncher.args); } + /** + * 查看源码,spring boot 2.3.x 不再调用createClassLoader(List archives),故修改launch方法更合适 + * @param args + * @param launchClass + * @param classLoader + * @throws Exception + */ @Override - protected ClassLoader createClassLoader(List archives) throws Exception { - URLClassLoader classLoader = (URLClassLoader) super.createClassLoader(archives); - URL[] urls = classLoader.getURLs(); - return new XBootClassLoader(urls, this.getClass().getClassLoader(), xLauncher.xDecryptor, xLauncher.xEncryptor, xLauncher.xKey); + protected void launch(String[] args, String launchClass, ClassLoader classLoader) throws Exception { + URLClassLoader urlClassLoader = (URLClassLoader) classLoader; + URL[] urls = urlClassLoader.getURLs(); + ClassLoader cl = new XBootClassLoader(urls, this.getClass().getClassLoader(), xLauncher.xDecryptor, xLauncher.xEncryptor, xLauncher.xKey); + Thread.currentThread().setContextClassLoader(cl); + createMainMethodRunner(launchClass, args, classLoader).run(); } + } diff --git a/src/main/java/io/xjar/boot/XJarLauncher.java b/src/main/java/io/xjar/boot/XJarLauncher.java index 8ebe2fc..5137b07 100644 --- a/src/main/java/io/xjar/boot/XJarLauncher.java +++ b/src/main/java/io/xjar/boot/XJarLauncher.java @@ -4,6 +4,7 @@ import org.springframework.boot.loader.JarLauncher; import java.net.URL; +import java.net.URLClassLoader; /** * Spring-Boot Jar 启动器 @@ -26,9 +27,21 @@ public void launch() throws Exception { launch(xLauncher.args); } + /** + * 查看源码,spring boot 2.3.x 不再调用createClassLoader(List archives),故修改launch方法更合适 + * + * @param args + * @param launchClass + * @param classLoader + * @throws Exception + */ @Override - protected ClassLoader createClassLoader(URL[] urls) throws Exception { - return new XBootClassLoader(urls, this.getClass().getClassLoader(), xLauncher.xDecryptor, xLauncher.xEncryptor, xLauncher.xKey); + protected void launch(String[] args, String launchClass, ClassLoader classLoader) throws Exception { + URLClassLoader urlClassLoader = (URLClassLoader) classLoader; + URL[] urls = urlClassLoader.getURLs(); + ClassLoader cl = new XBootClassLoader(urls, this.getClass().getClassLoader(), xLauncher.xDecryptor, xLauncher.xEncryptor, xLauncher.xKey); + Thread.currentThread().setContextClassLoader(cl); + createMainMethodRunner(launchClass, args, classLoader).run(); } } diff --git a/src/main/java/io/xjar/boot/XWarLauncher.java b/src/main/java/io/xjar/boot/XWarLauncher.java index fbb76a0..3d5d11e 100644 --- a/src/main/java/io/xjar/boot/XWarLauncher.java +++ b/src/main/java/io/xjar/boot/XWarLauncher.java @@ -4,6 +4,7 @@ import org.springframework.boot.loader.WarLauncher; import java.net.URL; +import java.net.URLClassLoader; /** * Spring-Boot Jar 启动器 @@ -26,9 +27,20 @@ public void launch() throws Exception { launch(xLauncher.args); } + /** + * 查看源码,spring boot 2.3.x 不再调用createClassLoader(List archives),故修改launch方法更合适 + * + * @param args + * @param launchClass + * @param classLoader + * @throws Exception + */ @Override - protected ClassLoader createClassLoader(URL[] urls) throws Exception { - return new XBootClassLoader(urls, this.getClass().getClassLoader(), xLauncher.xDecryptor, xLauncher.xEncryptor, xLauncher.xKey); + protected void launch(String[] args, String launchClass, ClassLoader classLoader) throws Exception { + URLClassLoader urlClassLoader = (URLClassLoader) classLoader; + URL[] urls = urlClassLoader.getURLs(); + ClassLoader cl = new XBootClassLoader(urls, this.getClass().getClassLoader(), xLauncher.xDecryptor, xLauncher.xEncryptor, xLauncher.xKey); + Thread.currentThread().setContextClassLoader(cl); + createMainMethodRunner(launchClass, args, classLoader).run(); } - }