1.可运行jar包和普通jar包及目录结构

可运行jar包是打jar包时,指定了main-class类,可以通过java -jar xxx.jar 命令,执行main-class的main方法,运行jar包。可运行jar包不可被其他项目进行依赖。

普通jar包打包时,不用指定main-class,也不可运行。普通jar包可以供其它项目进行依赖。
jar包的配置文件是META-INF文件夹下的MANIFEST.MF文件。里面配置了如下信息:
Manifest-Version
用来定义manifest文件的版本,例如:Manifest-Version: 1.0
Created-By
声明该文件的生成者,一般该属性是由jar命令行工具生成的,例如:Created-By: Apache Ant 1.5.1
Signature-Version
定义jar文件的签名版本
Class-Path
应用程序或者类装载器使用该值来构建内部的类搜索路径,可执行jar包里需要设置这个。

上面是普通jar包的属性,可运行jar包的.MF文件中,还会有mian-class或start-class等属性。如果依赖了外部jar包,还会在MF文件中配置lib路径等信息。

至于可运行jar包和普通jar包的目录结构,没有什么特别固定的模式,总之,无论是什么结构,在.MF文件中,配置好jar包的信息,即可正常使用jar包了。

2.如何打两种jar包

JDK提供了打jar包的命令,但是使用原生命令比较复杂,我们一般使用工具进行打包。下面讲解idea如何打jar包。
File–>Project Structure–>Artifacts–>添加jar包:
在这里插入图片描述
对于普通jar包,无需指定mianclass,对于可运行jar包,需要指定mainclass,然后进行打包使用。

3.war包的目录结构

可运行jar包里的代码,copy到war包中,在tomcat发布,可以使用吗?怀着这个疑问,我做了测试,发现不行。顺便贴出war包的目录结构,以便区分:

在这里插入图片描述

4.SpringBoot打成的jar包

SpringBoot项目打成可运行jar包,还可以打成普通jar包,供其它项目依赖。打成的普通jar包,是以orignal结尾的,去掉这个后缀形成的jar包,就是普通jar包。下面看一下SpringBoot形成的jar包结构和.MF文件:
在这里插入图片描述代码都在BOOT-INF下,如:
在这里插入图片描述
.MF文件配置如下:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: Administrator
Start-Class: xxx.xxx.xxx
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 2.1.1.RELEASE
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_31
Main-Class: org.springframework.boot.loader.JarLauncher

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐