确认Spring Boot项目的jar结构

在Spring Boot框架下,使用Maven作为构建工具,假设使用mvn install命令创建了一个jar文件。

这个罐子是怎么组成的?

我将jar文件的扩展名改成zip,然后解压缩并进行了确认,因为jar文件在内部实际上是zip格式。

jar(zip)のルートディレクトリ
├─BOOT-INF
│  ├─classes
│  │  ├─com
│  │  │  └─example
│  │  │      └─[artifactId]
│  │  │          ├─controller
│  │  │          ├─dto
│  │  │          ├─mapper
│  │  │          ├─model
│  │  │          └─service
│  │  ├─static
│  │  └─templates
│  └─lib
├─META-INF
│  └─maven
│      └─com.example
│          └─[artifactId]
└─org
    └─springframework
        └─boot
            └─loader
                ├─archive
                ├─data
                ├─jar
                ├─jarmode
                └─util

所以,使用Spring Boot自己编写的程序将存储在BOOT-INF\classes目录下。

如果不使用Spring Boot的Maven项目的情况下

如果不使用Spring Boot,而是使用纯Java的Maven项目,那么结构会变得简单如下。

jar(zip)のルートディレクトリ
├─com
│  └─example
│      ├─dto
│      └─enums
└─META-INF
    └─maven
        └─com.example
            └─demo

可以通过向他的Maven项目的pom.xml文件添加依赖关系,
以import com.example.enums.Foo的形式进行引用。

关于MANIFEST.MF的内容

在META-INF目录下存在一个名为MANIFEST.MF的文件。
这是一个被称为清单文件的文本文件,里面记录了有关jar文件的描述信息,并在创建jar文件时自动生成。
它包含了在运行时调用main()方法的类和定义类路径的信息。

以下是其中一个例子。

SpringBoot项目的一个例子

Manifest-Version: 1.0
Created-By: Maven JAR Plugin 3.3.0
Build-Jdk-Spec: 17
Implementation-Title: springTest
Implementation-Version: 0.0.1-SNAPSHOT
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.example.springTest.SpringTestApplication
Spring-Boot-Version: 3.0.5
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Spring-Boot-Layers-Index: BOOT-INF/layers.idx

如果不使用Spring Boot的情况下,Maven项目的一个示例

Manifest-Version: 1.0
Created-By: Apache Maven 3.8.7
Built-By: circu
Build-Jdk: 17.0.5

当manifest文件损坏或错误时,在启动jar文件时可能会出现”应用名.jar缺少主清单属性”的错误。有关详细信息,请参考解决Spring Boot jar缺少主清单属性的方法。

广告
将在 10 秒后关闭
bannerAds