in services/minho-spring-boot/src/main/java/org/apache/karaf/minho/springboot/SpringBootApplicationManagerService.java [93:121]
private String start(String url, String profile, ClassLoaderService classLoaderService, Map<String, String> properties) throws Exception {
log.info("Starting Spring Boot module " + url);
URLClassLoader classLoader = null;
if (profile == null) {
classLoader = new URLClassLoader(new URL[]{new URL(url)}, this.getClass().getClassLoader());
} else {
classLoader = new URLClassLoader(new URL[]{new URL(url)}, classLoaderService.getClassLoader(profile));
}
ClassLoader original = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(classLoader);
// invoke spring boot main
final Method main = classLoader.loadClass("org.springframework.boot.loader.JarLauncher").getMethod("main", String[].class);
main.setAccessible(true);
main.invoke(null, (Object)
Arrays.stream(Optional.ofNullable((String) properties.get("args")).orElse("").split(" ")).map(String::trim).toArray(String[]::new));
} finally {
Thread.currentThread().setContextClassLoader(original);
}
String id;
try (JarInputStream jarInputStream = new JarInputStream(new URL(url).openStream())) {
id = jarInputStream.getManifest().getMainAttributes().getValue("Start-Class");
}
if (id == null) {
id = UUID.randomUUID().toString();
}
return id;
}