自学内容网 自学内容网

SpringBoot 生产实践:没有父 starter 的打包问题

前言

今天刚准备写点文章,需要 SpringBoot 项目来演示效果。一时心血来潮,没有采用传统的方式(即通过引入 spring-boot-starter-parent 父工程的方式)。

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.7.5</version>
</parent>

而是采用了如下方式引入:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>2.7.5</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

这样引入在 idea 中使用是正常的。但是,今天当我需要打包的时候却发现:这种方式打出的 jar 包一执行就报:

image.png

此刻,我的心里真是五味杂陈 …

一、搜索引擎

本着内事不决问百度,外事不决问谷歌的优良传统。我立马借助了搜索引擎,可是搜了一圈才发现:这个问题压根就没有人提。果然,麻烦都是自找的。

image.png

仔细想想也是,谁没事放着常用且可靠的方案不用,总是去尝试一些稀奇古怪的方法。

二、Chat GPT

问题出现了,就犹如鱼刺卡在喉咙里,难受至极。于是我就借助了脑子聪明点的 Chat GPT。

image.png

可能是我提问的方式不对,于是我尝试了许多提问词,结果是一无所获。而且越问越生气。我只能感叹一句:人工智能就是人工智能,对于不知道的知识主打一个已读乱回。

三、官方文档

没招了,只好去看那枯燥的官方文档了。官网就是官网,就一个字——专业。

image.png

看到原因之后,我立马在 spring-boot-maven-plugin 中添加了如下的插件执行配置。

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>2.7.5</version>
      
       <!-- 插件执行配置 -->
      <executions>
        <execution>
          <goals>
            <goal>repackage</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

之后的打包文件可以正常运行了。

image.png

出于好奇心,我打开了 spring-boot-starter-parentPOM 文件,发现果然有这么一段配置。

image.png

四、小结

根据官网提供的消息,我们可知:本来 spring-boot-maven-plugin 是需要配置一些参数的,但是当我们使用 spring-boot-starter-parent 父工程的时候已经预先配置了一个重新打包的执行 ID,因此只需添加插件定义即可。而如果采用本文这种方式使用 SpringBoot 项目是需要手动配置的。

推荐阅读

  1. 构建安全稳定的应用:Spring Security 实用指南
  2. 深入探究 Spring Boot Starter:从概念到实践
  3. 深入理解 Java 中的 volatile 关键字
  4. Spring 三级缓存
  5. 深入了解 MyBatis 插件:定制化你的持久层框架

原文地址:https://blog.csdn.net/LearnerDL/article/details/140233412

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!