Commit 59b8fc63 authored by Dave Syer's avatar Dave Syer

Scan for a valid MANIFEST.MF instead of taking the first one

Fixes gh-1321
parent bacbff1f
......@@ -19,6 +19,7 @@ package org.springframework.boot.cli.jar;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Enumeration;
import java.util.jar.Manifest;
/**
......@@ -31,6 +32,8 @@ public class PackagedSpringApplicationLauncher {
public static final String SOURCE_MANIFEST_ENTRY = "Spring-Application-Source-Classes";
public static final String MAIN_CLASS_MANIFEST_ENTRY = "Start-Class";
private static final String SPRING_APPLICATION_CLASS = "org.springframework.boot.SpringApplication";
private void run(String[] args) throws Exception {
......@@ -42,11 +45,20 @@ public class PackagedSpringApplicationLauncher {
}
private Object[] getSources(URLClassLoader classLoader) throws Exception {
URL url = classLoader.findResource("META-INF/MANIFEST.MF");
for (Enumeration<URL> urls = classLoader.findResources("META-INF/MANIFEST.MF"); urls
.hasMoreElements();) {
URL url = urls.nextElement();
Manifest manifest = new Manifest(url.openStream());
String attribute = manifest.getMainAttributes().getValue(SOURCE_MANIFEST_ENTRY);
if (getClass().getName().equals(
manifest.getMainAttributes().getValue(MAIN_CLASS_MANIFEST_ENTRY))) {
String attribute = manifest.getMainAttributes().getValue(
SOURCE_MANIFEST_ENTRY);
return loadClasses(classLoader, attribute.split(","));
}
}
throw new IllegalStateException("Cannot locate " + SOURCE_MANIFEST_ENTRY
+ " in MANIFEST.MF");
}
private Class<?>[] loadClasses(ClassLoader classLoader, String[] names)
throws ClassNotFoundException {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment