问题描述
JVM能够从jar文件加载类或文件,而无需将jar提取为临时文件。
您也可以在标准库中使用此功能,JarFile
有关更多信息,请参见。
因此,不,JVM不会将jar提取到临时文件,类(和资源)只是按需加载。
jar文件基本上是带有预定义条目的zip文件"Meta-
INF/MANIFEST.MF"
(仅在可执行jar情况下才是必需的)。该MANIFEST.MF
条目(文件)包含JVM读取的一些信息。有关清单文件的更多信息:
如果是可执行jar,则清单文件还包含应加载的主类,并public static void
main(String[])
调用该类的方法以启动应用程序。该Main-Class
清单条目指定主类:
Main-Class: classname
解决方法
我们知道这jar
是一种压缩的存档文件格式,可以用作已编译的Java类和conf文件的容器。据我所知,要从压缩的容器文件中读取任何内容,首先需要将它们提取到某个位置。
那么JVM如何在jar中执行类?它是否将罐子中的内容提取到临时位置,然后执行类?