springboot打包jar中没有主清单属性问题

 更新时间:2023年12月01日 10:36:21   作者:橙巴布  
这篇文章主要介绍了springboot打包jar中没有主清单属性问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

开场废话

不看过程的可以直接看原因和解决方案

现在大多都是springboot项目了,甚至大多公司使用了多模块用于dubbo和cloud。这里主要简单讲一下新手建项目,可以运行,但是打包没有主清单属性的问题。

出现这种问题的情况肯定不止以下的情况,

以下两种依赖情况:

  • a.使用了spring-boot-starter-parent + 插件=打包成功
  • b.没有使用spring-boot-starter-parent,用插件+排除=打包成功

项目结构

在这里插入图片描述

依赖1-能运行,打包没有清单

主pom:
    spring-boot-starter-parent
子pom:
    spring-boot-starter
    spring-boot-starter-web    

主pom文件内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.demo</groupId>
    <artifactId>diy</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <modules>
        <module>diy-common</module>
        <module>diy-api</module>
        <module>diy-service</module>
    </modules>
</project>

service pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>diy</artifactId>
        <groupId>com.demo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>diy-service</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

依赖1-改-能运行,打包正常

增加打包插件

主pom:
    spring-boot-starter-parent
子pom:
    spring-boot-starter
    spring-boot-starter-web
    spring-boot-maven-plugin

server pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>diy</artifactId>
        <groupId>com.demo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>diy-service</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

依赖2-能运行,打包没有清单

主pom中不加parent依赖,在子版本中指定springboot版本

主pom:
子pom:
    spring-boot-starter
    spring-boot-starter-web
    spring-boot-maven-plugin

主 pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.demo</groupId>
    <artifactId>diy</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>diy-common</module>
        <module>diy-api</module>
        <module>diy-service</module>
    </modules>
</project>

service pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>diy</artifactId>
        <groupId>com.demo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>diy-service</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.5.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.5.3</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.5.3</version>
            </plugin>
        </plugins>
    </build>
</project>

依赖2改-能运行,打包正常

在spring-boot-maven-plugin插件中增加executions

主pom:
子pom:
    spring-boot-starter
    spring-boot-starter-web
    spring-boot-maven-plugin
        <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>diy</artifactId>
        <groupId>com.demo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>diy-service</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.5.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.5.3</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.5.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

原因分析 

使用springboot时需要使用打包插件,插件有很多,这里使用spring-boot-maven-plugin

当我们为了做微服务时,在主pom中不增加多余的依赖时,子中只能设置一个parent,就是主pom,这时spring-boot-starter-parent没有依赖,打包就会没有清单,但是我们是添加了插件的,所以原因可能出在spring-boot-start-parent包中。

查看spring-boot-start-parent内容

这个pom里面添加了一个打包排除

解决方案 

使用了 spring-boot-starter-parent依赖的直接加入插件就行

没有使用spring-boot-starter-parent依赖的,除了加插件,在插件中加个排除

<!--这里是有spring-boot-starter-parent依赖的处理-->
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
<!--这里是没有spring-boot-starter-parent依赖的处理-->
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--因为没有依赖parent,所以这里版本不能少,一般情况下和上面的starter版本一样,或者可以低那么几个小版本-->
                <version>2.5.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java中锁的全面解析之类型、使用场景、优缺点及实现方式(示例代码)

    Java中锁的全面解析之类型、使用场景、优缺点及实现方式(示例代码)

    本文将从锁的基本概念出发,详细讲解Java中常见的锁类型、它们的使用场景、优缺点以及底层实现原理,并通过代码示例帮助读者深入理解,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • Java字符串转驼峰格式的方法

    Java字符串转驼峰格式的方法

    在开发场景中,我们会遇到一些涉及字符串的转化,本文主要介绍了Java字符串转驼峰格式的方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Java使用桥接模式实现开关和电灯照明功能详解

    Java使用桥接模式实现开关和电灯照明功能详解

    这篇文章主要介绍了Java使用桥接模式实现开关和电灯照明功能,较为详细的讲述了桥接模式的概念、原理并结合实例形式分析了Java使用桥接模式实现开关和电灯照明功能相关操作步骤与注意事项,需要的朋友可以参考下
    2018-05-05
  • 浅谈SpringMVC请求映射handler源码解读

    浅谈SpringMVC请求映射handler源码解读

    这篇文章主要介绍了浅谈SpringMVC请求映射handler源码解读,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • springboot项目启动慢的问题排查方式

    springboot项目启动慢的问题排查方式

    这篇文章主要介绍了springboot项目启动慢的问题排查方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 一文盘点SpringBoot中常用跨域处理方案

    一文盘点SpringBoot中常用跨域处理方案

    跨域是浏览器为了保障安全而遵循的一种规则,是同源策略的一部分,本文将为大家整理了SpringBoot中常用跨域处理的方法,需要的小伙伴可以了解下
    2025-08-08
  • SpringBoot集成Mybatis的实现步骤

    SpringBoot集成Mybatis的实现步骤

    这篇文章主要介绍了SpringBoot集成Mybatis的实现步骤,本文通过SpringBoot +MyBatis 实现对数据库学生表的查询操作,需要的朋友可以参考下
    2020-12-12
  • java字符串相加时的内存表现和原理分析

    java字符串相加时的内存表现和原理分析

    这篇文章主要介绍了java字符串相加时的内存表现和原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • eclipse maven 插件的安装和配置详解

    eclipse maven 插件的安装和配置详解

    这篇文章主要介绍了eclipse maven 插件的安装和配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Java中的强引用,软引用,弱引用,虚引用的作用介绍

    Java中的强引用,软引用,弱引用,虚引用的作用介绍

    这篇文章主要介绍了Java中的强引用,软引用,弱引用,虚引用的作用,下文内容具有一定的知识参考价值,需要的小伙伴可以参考一下,希望对你有所帮助
    2022-02-02

最新评论