当通过java -jar或者命令行mvn spring-boot:run的方式启动springboot项目时,会引导执行如下代码:
public static void main(String[] args) throws Exception {
new JarLauncher().launch(args);
}
调用JarLauncher不带参数的构造方法创建JarLauncher对象,根据Java的继承特性会调用父类中的createArchive方法,官方代码实现如下:
protected final Archive createArchive() throws Exception {
ProtectionDomain protectionDomain = getClass().getProtectionDomain();
CodeSource codeSource = protectionDomain.getCodeSource();
URI location = (codeSource != null) ? codeSource.getLocation().toURI() : null;
String path = (location != null) ? location.getSchemeSpecificPart() : null;
if (path == null) {
throw new IllegalStateException("Unable to determine code source archive");
}
File root = new File(path);
if (!root.exists()) {
throw new IllegalStateException("Unable to determine code source archive from