From 4a6227a7774d77838fc81fcafdd7eb68f1572366 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Tue, 21 Aug 2018 13:42:28 +0100 Subject: [PATCH] Extract parent creation logic into a method Fixes #201 --- .../deployer/FunctionCreatorConfiguration.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionCreatorConfiguration.java b/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionCreatorConfiguration.java index 52494cf37..f31298d8a 100644 --- a/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionCreatorConfiguration.java +++ b/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/FunctionCreatorConfiguration.java @@ -244,11 +244,24 @@ class FunctionCreatorConfiguration { private String defaultMain; public BeanCreator(URL[] urls) { - functionClassLoader = new BeanCreatorClassLoader(expand(urls), - getClass().getClassLoader().getParent()); + functionClassLoader = new BeanCreatorClassLoader(expand(urls), getParent()); this.defaultMain = findMain(urls); } + private ClassLoader getParent() { + ClassLoader loader = getClass().getClassLoader().getParent(); + ClassLoader parent = loader; + while (loader.getParent() != null) { + // If launched from a fat jar with spring.factories skip this parent level + // (which was added by the JarLauncher). + if (loader.getResource("META-INF/spring.factories") != null) { + parent = loader.getParent(); + } + loader = loader.getParent(); + } + return parent; + } + private String findMain(URL[] urls) { for (URL url : urls) { try {