springboot打包实现项目JAR包和依赖JAR包分离

Spring Boot能够将整个应用打包到一个 JAR 文件中,同时它也支持将应用的主 JAR 包和第三方依赖包分离,以达到减小 JAR 文件大小的目的,提高应用启动速度的目的。下面是详细的攻略:

1. 配置 Maven 插件

在 Spring Boot 应用的 pom.xml 文件中,添加如下插件:

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <configuration>
        <mainClass>com.example.MyApplication</mainClass>
        <layout>JAR</layout>
        <excludes>
            <exclude>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </exclude>
        </excludes>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>repackage</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

其中,主要配置如下:

  • mainClass 表示启动类的全限定名,该类在打包后的 JAR 包中是默认的启动类;
  • layout 配置打包方式,选择 JAR 进行打包;
  • excludes 指定需要排除的依赖,可以根据需要调整。

2. 使用 Maven 打包

在 Maven 命令行中执行:

mvn clean package

执行完成后,可以在项目的 target 目录下找到生成的 JAR 包。此时,JAR 包中已经包含了所有的依赖包。

3. 分离 JAR 包

使用如下命令,将主 JAR 包和依赖包进行分离:

jar -xf example.jar

执行该命令后,可以看到项目的根目录下增加了许多目录和文件,其中包括以下几个目录:

BOOT-INF/classess/
BOOT-INF/lib/
META-INF/

其中,BOOT-INF/classess/ 目录下存放了项目的 Java class 文件,BOOT-INF/lib/ 目录下存放了分离的依赖包,META-INF/ 目录下包含了项目的元数据信息。

可以通过如下命令,来启动应用程序:

java -cp example.jar:BOOT-INF/lib/* com.example.MyApplication

其中,:BOOT-INF/lib/* 字符串表示添加依赖包的路径为当前目录的 BOOT-INF/lib/ 目录,com.example.MyApplication 为启动类的全限定名。

示例

示例一:Spring Boot Web 应用

一个 Spring Boot 的 Web 应用,其打包和分离示例配置如下:

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <configuration>
        <mainClass>com.example.MyApplication</mainClass>
        <layout>JAR</layout>
        <excludes>
            <exclude>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </exclude>
        </excludes>
        <classifier>exec</classifier>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>repackage</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

执行如下命令,将 JAR 包分离:

jar -xf example-exec.jar

启动应用程序:

java -cp example.jar:example-exec/BOOT-INF/lib/* com.example.MyApplication

其中,example-exec 目录为 example-exec.jar 文件解压后的目录名称。

示例二:Spring Boot 非 Web 应用

一个 Spring Boot 的非 Web 应用,其打包和分离示例配置如下:

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <configuration>
        <mainClass>com.example.MyApplication</mainClass>
        <layout>JAR</layout>
        <excludes>
            <exclude>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </exclude>
        </excludes>
        <classifier>exec</classifier>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>repackage</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

执行如下命令,将 JAR 包分离:

jar -xf example-exec.jar

启动应用程序:

java -cp example.jar:example-exec/BOOT-INF/lib/* com.example.MyApplication

其中,example-exec 目录为 example-exec.jar 文件解压后的目录名称。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot打包实现项目JAR包和依赖JAR包分离 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Springboot通用mapper和mybatis-generator代码示例

    下面是关于“Springboot通用mapper和mybatis-generator代码示例”的完整攻略: 一、什么是Springboot通用mapper和mybatis-generator 1. Springboot通用mapper Springboot通用mapper是一款能够提高数据访问的工具,主要用于深度整合Mybatis和Spring Data J…

    Java 2023年5月20日
    00
  • 面试官:详细谈谈Java对象的4种引用方式

    下面我会详细讲解Java对象的4种引用方式: 一、强引用 (Strong Reference) 强引用是Java中最普通、默认的引用方式,当一个对象被强引用变量引用时,垃圾回收器无法自动对其进行回收。只有在该对象的所有强引用变量被释放后,垃圾回收器才会回收该对象并释放其占用的内存空间。 示例代码: Object obj = new Object(); // …

    Java 2023年5月26日
    00
  • 快速搭建SSM框架(Maven)五步曲的方法步骤

    下面我将详细讲解快速搭建SSM框架(Maven)五步曲的方法步骤。具体步骤如下: 1. 创建一个基于Maven的Web项目 <groupId>com.example</groupId> <artifactId>ssm-demo</artifactId> <version>1.0</versio…

    Java 2023年5月20日
    00
  • 使用Spring Boot 2.x构建Web服务的详细代码

    使用Spring Boot 2.x构建Web服务的详细代码攻略 Spring Boot是一个流行的Java框架,可以帮助开发人员快速构建Web应用程序。本文将详细介绍使用Spring Boot 2.x构建Web服务的详细代码攻略,包括如何创建Spring Boot项目、如何定义Controller、如何处理请求、如何返回响应等。 创建Spring Boot项…

    Java 2023年5月15日
    00
  • Java如何实现登录token令牌

    Java实现登录token令牌的方法有多种,一种较为常见的方式是利用JSON Web Token(JWT)。 什么是JWT? JWT是一种开放标准(RFC 7519),可以在不同应用程序之间安全地传递信息,该信息可以进行身份验证和授权。JWT包含三部分:头部,载荷(也称为声明)和签名。头部通常包含使用的签名算法,载荷包含请求的用户数据和其他元数据,签名用于验…

    Java 2023年5月26日
    00
  • Spring Boot 自定义数据源DruidDataSource代码

    那么关于Spring Boot自定义数据源DruidDataSource的完整攻略,主要分为以下几个步骤: 导入相关依赖 首先,在Spring Boot项目中,需要导入Druid和JDBC相关的依赖。可以在pom.xml文件中加入如下代码: <!– 导入Druid数据源依赖 –> <dependency> <groupId&…

    Java 2023年5月20日
    00
  • 浅谈Java中FastJson的使用

    浅谈Java中FastJson的使用 什么是FastJson FastJson 是一个 Java 语言编写的高性能 JSON 处理器,但不仅仅是一个 JSON 库。它采用了一种名为 递归下降 的方式来实现 JSON 的解析,因此它的性能非常快。 在Java中,使用FastJson可以很方便地将java对象序列化与反序列化成json格式的字符串,支持按需解析,…

    Java 2023年5月26日
    00
  • Apache Hudi结合Flink的亿级数据入湖实践解析

    Apache Hudi 是什么? Apache Hudi 是 Apache 基金会下的开源项目,它提供了一个数据湖解决方案,支持增量式的数据处理和可变的数据表现形式。Hudi 最初由 Ubiquiti 区块链团队在 2016 年开发,2019 年捐赠给 Apache 软件基金会。Hudi 的核心特性是 Delta Lake 和 Apache Kafka 支持…

    Java 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部