SpringBoot-Loader源码分析系列2:启动 new JarLauncher().launch(args)的.launch(args)部分

上一节,我们读取了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);

放在下一节来讲解。

转载于:https://my.oschina.net/qiangzigege/blog/819513

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值