【发布时间】:2019-07-09 20:36:19
【问题描述】:
如何以编程方式从 BOOT-INF/lib 中的 jar 中的代码获取 Start-Class 清单属性?
我知道我可以获取 LaunchURLClassLoader,调用 getResourceAsStream("META-INF/MANIFEST.MF"),然后在 MANIFEST.MF 中查找属性,但我不确定这是最好的方法
【问题讨论】:
标签: spring-boot
如何以编程方式从 BOOT-INF/lib 中的 jar 中的代码获取 Start-Class 清单属性?
我知道我可以获取 LaunchURLClassLoader,调用 getResourceAsStream("META-INF/MANIFEST.MF"),然后在 MANIFEST.MF 中查找属性,但我不确定这是最好的方法
【问题讨论】:
标签: spring-boot
您的方法很好,可能会奏效,但您可以将抽象级别提高一级并使用 Spring 的 Resource Loader。
Resource template = ctx.getResource("classpath:/path/to/manifest");
【讨论】:
public class UserAgentSpringBootApplicationNameDiscoverer {
protected static final String BOOT_INF_DIR = "BOOT-INF/";
protected static final String MANIFEST_DIR = "META-INF/MANIFEST.MF";
public String getStartClassFromClassLoader(ClassLoader cl) {
URL bootInfUrl = cl.getResource(BOOT_INF_DIR);
if (bootInfUrl == null || "".equals(bootInfUrl.toString().trim())) {
return null;
}
String rootMetaInfUrl = bootInfUrl.toString().replace(BOOT_INF_DIR, MANIFEST_DIR);
InputStream is = cl.getResourceAsStream(rootMetaInfUrl.toString());
if (is == null) {
return null;
}
Manifest manifest = null;
try {
manifest = new Manifest(is);
} catch (IOException e) {
return null;
}
return manifest.getMainAttributes().getValue("Start-Class");
}
}
【讨论】: