maven打包后的jar包内容都有什么?——详细说明

在 Maven 项目中打包生成的 JAR 文件是一个压缩包,包含编译后的 Java 类文件及相关的资源文件。通常 JAR 包的内容和结构大致如下:

1. META-INF 文件夹

  • 目录位置: META-INF/

  • 内容:

    • MANIFEST.MF 文件:这个文件包含 JAR 包的元数据,如版本信息、依赖项、主类等。Maven 打包时会自动生成该文件。

    示例 MANIFEST.MF 文件内容:

    Manifest-Version: 1.0
    Created-By: Apache Maven 3.8.4
    Build-Jdk: 11.0.12
    Main-Class: com.example.MainClass  (如果指定了主类)
    

    该文件描述了 JAR 包的基本信息,如果在 pom.xml 中指定了 mainClass,它也会在这个文件中标注主类,以便支持 java -jar 运行。

  • 其他可能出现的文件

    • maven/:如果你启用了 Maven 构建相关的配置,可能会包含 pom.propertiespom.xml 文件,记录项目的 Maven 构建信息。
    • 签名文件:如果你对 JAR 文件进行了签名,签名文件和证书也会存放在这个目录下。

2. 项目的编译类文件

  • 目录位置: 根目录下,通常按包名划分成多个文件夹,如 com/example/...
  • 内容: 项目中编译生成的 .class 文件(即源代码编译后的字节码文件)。

示例目录结构:

com/
  example/
    MainClass.class
    MyService.class

这些文件是 Maven 在打包过程中将 src/main/java/ 下的 Java 源代码编译后放入 JAR 包的。

3. 资源文件

  • 目录位置: 按照项目的包结构或文件夹结构保留在根目录下。
  • 内容: 项目中定义的静态资源文件,如 src/main/resources/ 下的所有文件都会打包进 JAR 文件。这些文件可能包括:
    • application.propertiesapplication.yml(Spring Boot 项目中的配置文件)。
    • 其他资源文件,如 XML 配置文件、图片、HTML、CSS、国际化文件等。

示例目录结构:

resources/
  application.properties
  messages.properties

4. 依赖的第三方库(可选)

如果你使用 Maven shade 插件或 spring-boot-maven-plugin 等工具将所有依赖打包成一个可执行 JAR(fat JAR 或 uber JAR),则会将所有的依赖项一起打包到 JAR 文件中。依赖的库通常会放置在 JAR 文件的 BOOT-INF/lib/ 或者 lib/ 目录下(根据插件不同,位置也不同)。

示例目录结构:

BOOT-INF/
  lib/
    spring-core-5.3.10.jar
    jackson-databind-2.12.3.jar

5. 自定义目录/文件(可选)

  • 目录位置: 项目中自定义的目录结构和文件。
  • 内容: 如果项目中有其他特殊的文件或配置,如日志文件、特定应用的配置文件,它们也会按照项目的文件夹结构打包进入 JAR。

例如,如果项目中有 src/main/resources/logback.xml 文件,它会被打包成:

logback.xml

6. Spring Boot 项目中的特殊结构

如果你在 Spring Boot 项目中使用了 spring-boot-maven-plugin 插件来打包 JAR,生成的 JAR 文件会有更复杂的结构,包括以下内容:

  • BOOT-INF/classes/: 存放编译后的项目代码和资源文件。
  • BOOT-INF/lib/: 存放所有依赖的第三方库。
  • META-INF/: 存放 JAR 元数据(如 MANIFEST.MF 文件)。
  • org/springframework/boot/loader/: 包含 Spring Boot 的启动加载器类文件,使 JAR 可以通过 java -jar 执行。

示例目录结构:

BOOT-INF/
  classes/
    com/
      example/
        MainClass.class
    application.properties
  lib/
    spring-core-5.3.10.jar
    jackson-databind-2.12.3.jar
META-INF/
  MANIFEST.MF
org/
  springframework/
    boot/
      loader/
        JarLauncher.class
        ...其他类

7. 测试文件(通常不会包含在最终的 JAR 包中)

默认情况下,测试类和测试资源文件不会被打包进 JAR 中,因为这些文件位于 src/test/java/src/test/resources/,而 Maven 的打包目标不包含这些目录。如果需要将测试文件也打包,可以手动配置 Maven 的 build 设置。


总结

Maven 打包的 JAR 文件中一般会包含以下内容:

  • META-INF 文件夹:存放 JAR 包元数据(如 MANIFEST.MF)。
  • 编译后的类文件:项目的 .class 文件,按包名划分。
  • 资源文件:项目中 src/main/resources 目录下的文件。
  • 第三方依赖(可选):如果使用了 shadespring-boot-maven-plugin,第三方依赖会打包进 JAR。

希望对你有所帮助,若有问题欢迎指正~😊

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值