上一节,我们读取了MANIFEST.MF文件,这一节,我们进入了new JarLauncher().launch(args)的.launch(args)部分。
先上总体代码
protected void launch(String[] args) throws Exception {
// 看到这里了
JarFile.registerUrlProtocolHandler();
ClassLoader classLoader = createClassLoader(getClassPathArchives());
launch(args, getMainClass(), classLoader);
}
===============================
先来debug第一行JarFile.registerUrlProtocolHandler();
/**
* Register a {@literal 'java.protocol.handler.pkgs'} property so that a
* {@link URLStreamHandler} will be located to deal with jar URLs.
*/
public static void registerUrlProtocolHandler() {
//
//main[1] print handlers
// handlers = ""
String handlers = System.getProperty(PROTOCOL_HANDLER, "");
//
//设置为 = "java.protocol.handler.pkgs--->org.springframework.boot.loader";
System.setProperty(PROTOCOL_HANDLER, ("".equals(handlers) ? HANDLERS_PACKAGE
: handlers + "|" + HANDLERS_PACKAGE));
//
resetCachedUrlHandlers();
//结束
}
上面的比较简单,不解释。
===接着往下执行ClassLoader classLoader = createClassLoader(getClassPathArchives());
我们来看看这一行做了什么事情。
其中getClassPathArchives的内容为
@Override
protected List<Archive> getClassPathArchives() throws Exception {
//看到这里了
List<Archive> archives = new ArrayList<Archive>(
this.archive.getNestedArchives(new EntryFilter() {
@Override
public boolean matches(Entry entry) {
return isNestedArchive(entry);
}
}));
postProcessClassPathArchives(archives);
return archives;
}
下面认真分析下这个函数的内容。
这个主要是从当前文件夹下面取一些文件,那么什么样的文件符合条件呢?
@Override
protected boolean isNestedArchive(Archive.Entry entry) {
if (entry.isDirectory()) {
return entry.getName().equals(BOOT_INF_CLASSES);//"BOOT-INF/classes/"
}
return entry.getName().startsWith(BOOT_INF_LIB);//"BOOT-INF/lib/"
}
看到这里,估计大致也就明白了。
为了节省时间,这里就不去深究里面的原理,我们看到外面的代码是:
@Override
public List<Archive> getNestedArchives(EntryFilter filter) throws IOException {
//看到这里了
List<Archive> nestedArchives = new ArrayList<Archive>();
for (Entry entry : this) {
if (filter.matches(entry)) {
nestedArchives.add(getNestedArchive(entry));
}
}
return Collections.unmodifiableList(nestedArchives);
}
为了方便,我直接把结果打印出来。
main[1] print archives
archives = "[
file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/classes/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/HdrHistogram-2.1.6.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/HikariCP-2.5.1.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/annotations-2.0.3.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/aopalliance-1.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/asm-5.0.3.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/asm-analysis-5.0.3.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/asm-commons-5.0.3.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/asm-tree-5.0.3.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/asm-util-5.0.3.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/aws-java-sdk-core-1.11.69.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/aws-java-sdk-sts-1.11.69.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/brave-core-3.16.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/brave-http-3.16.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/brave-okhttp-3.16.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/brave-spancollector-local-3.16.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/brave-spring-web-servlet-interceptor-3.16.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/cassandra-driver-core-3.1.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/cassandra-driver-mapping-3.1.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/classmate-1.3.3.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/commons-cli-1.3.1.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/commons-codec-1.10.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/commons-logging-1.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/compress-lzf-1.0.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/elasticsearch-2.4.3.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/gson-2.7.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/guava-18.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/guice-4.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/guice-multibindings-4.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/helper-1.0.1.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/hibernate-validator-5.2.4.Final.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/hppc-0.7.1.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/httpclient-4.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/httpcore-4.4.5.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/ion-java-1.0.1.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jackson-annotations-2.8.5.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jackson-core-2.8.5.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jackson-databind-2.8.5.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jackson-dataformat-cbor-2.8.5.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jackson-dataformat-smile-2.8.5.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jackson-dataformat-yaml-2.8.5.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/javax.inject-1.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jboss-logging-3.3.0.Final.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jcl-over-slf4j-1.7.22.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jffi-1.2.10-native.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jffi-1.2.10.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jline-0.9.94.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jmespath-java-1.11.69.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jmxutils-1.18.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jnr-constants-0.9.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jnr-ffi-2.0.7.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jnr-posix-3.0.27.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jnr-x86asm-1.0.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/joda-time-2.9.6.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jol-core-0.1.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jooq-3.8.6.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jopt-simple-3.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/json-20140107.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jsr166e-1.1.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/jul-to-slf4j-1.7.22.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/kafka-clients-0.8.2.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/kafka_2.11-0.8.2.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/libthrift-0.9.3.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/log-0.119.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/log4j-1.2.14.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/log4j-over-slf4j-1.7.22.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/logback-classic-1.1.8.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/logback-core-1.1.8.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-analyzers-common-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-backward-codecs-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-core-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-grouping-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-highlighter-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-join-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-memory-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-misc-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-queries-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-queryparser-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-sandbox-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-spatial-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-spatial3d-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lucene-suggest-5.5.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/lz4-1.2.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/mariadb-java-client-1.5.5.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/metrics-core-2.2.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/metrics-core-3.1.2.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/moshi-1.2.0.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/netty-3.10.6.Final.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/netty-buffer-4.0.37.Final.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/netty-codec-4.0.37.Final.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/netty-common-4.0.37.Final.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/netty-handler-4.0.37.Final.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/netty-tcnative-boringssl-static-1.1.33.Fork23.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/netty-transport-4.0.37.Final.jar!/,
jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/nifty-client-0.23.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/nifty-core-0.23.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/nifty-ssl-0.23.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/okhttp-3.5.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/okio-1.11.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/paranamer-2.8.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/scala-library-2.11.5.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/scala-parser-combinators_2.11-1.0.2.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/scala-xml_2.11-1.0.2.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/securesm-1.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/slf4j-api-1.7.22.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/slice-0.10.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/snakeyaml-1.17.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/snappy-java-1.1.1.7.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spatial4j-0.5.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-aop-4.3.5.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-beans-4.3.5.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-boot-1.4.3.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-boot-actuator-1.4.3.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-boot-autoconfigure-1.4.3.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-boot-configuration-processor-1.4.3.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-boot-starter-1.4.3.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-boot-starter-actuator-1.4.3.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-boot-starter-logging-1.4.3.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-boot-starter-tomcat-1.4.3.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-boot-starter-web-1.4.3.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-context-4.3.5.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-core-4.3.5.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-expression-4.3.5.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-web-4.3.5.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/spring-webmvc-4.3.5.RELEASE.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/stats-0.119.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/swift-annotations-0.23.1.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/swift-codec-0.23.1.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/swift-service-0.23.1.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/t-digest-3.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/tomcat-embed-core-8.5.6.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/tomcat-embed-el-8.5.6.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/tomcat-embed-websocket-8.5.6.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/units-0.119.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/validation-api-1.1.0.Final.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-autoconfigure-collector-kafka-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-autoconfigure-collector-scribe-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-autoconfigure-metrics-prometheus-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-autoconfigure-storage-cassandra-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-autoconfigure-storage-cassandra3-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-autoconfigure-storage-elasticsearch-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-autoconfigure-storage-elasticsearch-aws-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-autoconfigure-storage-elasticsearch-http-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-autoconfigure-storage-mysql-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-autoconfigure-ui-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-collector-kafka-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-collector-scribe-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-guava-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-reporter-0.6.9.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-storage-cassandra-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-storage-cassandra3-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-storage-elasticsearch-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-storage-elasticsearch-http-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-storage-mysql-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zipkin-ui-1.19.0.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zkclient-0.3.jar!/, jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/zookeeper-3.4.6.jar!/]"
看了,就知道大致啥意思了,不解释。
然后,需要执行
postProcessClassPathArchives(archives);
这个函数,什么都不做。
返回上面的结果,进入ClassLoader classLoader = createClassLoader(archives);
下面来分析下这个函数做了什么事情。
这个函数的最终目的是
/**
* Create a classloader for the specified URLs.
*
* @param urls
* the URLs
* @return the classloader
* @throws Exception
* if the classloader cannot be created
*/
protected ClassLoader createClassLoader(URL[] urls) throws Exception {
return new LaunchedURLClassLoader(urls, getClass().getClassLoader());
}
先打印出urls为类似于下面的
main[1] print urls[0]
urls[0] = "file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/classes/"
main[1] print urls[1]
urls[1] = "jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/HdrHistogram-2.1.6.jar!/"
main[1] print urls[2]
urls[2] = "jar:file:/root/springboot_tomcat_jetty_zipkin_brave_debug/BOOT-INF/lib/HikariCP-2.5.1.jar!/"
这样,就生成了一个LaunchedURLClassLoader的实体类。
这个类继承了URLClassLoader类。
---最后,就进入了实际的环节:
launch(args, getMainClass(), classLoader);
放在下一节来讲解。