idea Maven Springboot多模块项目打包时90%的问题及解决方案

 更新时间:2025年08月04日 14:52:01   作者:红尘丶世界  
这篇文章主要介绍了idea Maven Springboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1. 前言

之所以写这篇文章是因为在使用Maven的过程中遇到了许多问题,在这里作为记录总结

2. 问题

使用idea打包的时候编译偶尔成功偶尔失败,本地运行能成功,有时能打包成功但是发现使用 jar 包跑的时候会出现类找不到的情况,最终经过排查发现有部分的类打包的时候打包不进去。

3. 解决办法

关闭idea,找到对应项目的目录删除 .idea 文件,让 idea 去重构项目

删除 Maven 本地仓库下当前项目的对应的包,以 org.apache 为例,删除该文件夹下的所有文件夹。

清除 本地Maven 仓库中下载失败的jar 包

#1. 创一个.bat文件使用记事本打开 
#2. 修改路径为maven本地仓库路径
#3. 保存退出,双击执行
set REPOSITORY_PATH=D:\xxxx\apache-maven-3.3.9\repository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
    del /s /q %%i
)
rem 搜索完毕
pause

刷新maven本地仓库,顺便检查一下 maven 配置和 maven 的jdk 配置

在idea中File -> settings -> -> Build,Execution -> Build Tools -> Maven -> repositories

重启idea(当然也可以选择Reload,个人建议重启idea),reload 有时会出现更新不上的情况。

重启后,会发现可能有部分模块引用了其它模块的jar会报错,这是正常现象,这是因为你没有对公共模块进行打包,导致引入了公共模块的其它模块报错,但如果除了公共模块之外还有其它的jar包还是报错这就得检查一下maven 本地仓库是否下载成功了。

指定打包方式:

  • 父项目指定打包方式为pom
  • 公共模块例如 common 、utils、Entity 这些模块,建议打成jar包
  • 可执行模块打成war 包
<! -- 具体指定打包方式,在pom文件的properties 上方添加: -->
<packaging>pom</packaging>
<packaging>jar</packaging>
<packaging>war</packaging>

在可执行模块添加 springboot maven 打包插件,其它模块无需添加,最好指定主类。

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>xxx.xxx.mainClass</mainClass>
                    <cleanCache>true</cleanCache>
                    <sourceDirectory>src/main/java</sourceDirectory>
                    <fork>true</fork>
                    <addResources>true</addResources>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>
        </plugins>
    </build>

在公共项目先进行打包

所有公共项目全部打包之后需要Reload 一下,重新导入一下jar,导入之后,所有的如果导入成功就不会报错了,这里还是建议重启,idea 有时会抽风存在导入不成功的情况。

在父项目中执行package打包

4. jar 包冲突

这里推荐一个插件,Maven Helper , 在idea setting 里面下载maven helper 插件。

下载后进入pom.xml 文件,点击Dependency Analyzer,就能看到项目中依赖的版本了,如果是冲突的jar 就会爆红。

选择爆红的jar,鼠标右击选择exclusion,就能排查冲突的依赖了,然后点击 Reimport 和 Refresh UI,就能看到之前冲突的jar被排查了

总结

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

相关文章

  • Java网络编程之UDP实现原理解析

    Java网络编程之UDP实现原理解析

    UDP实现通信非常简单,没有服务器,每个都是客户端,每个客户端都需要一个发送端口和一个接收端口,本文给大家介绍Java网络编程之UDP实现原理解析,感兴趣的朋友一起看看吧
    2021-09-09
  • Java并发编程之线程池实现原理详解

    Java并发编程之线程池实现原理详解

    池化思想是一种空间换时间的思想,期望使用预先创建好的对象来减少频繁创建对象的性能开销,java中有多种池化思想的应用,例如:数据库连接池、线程池等,下面就来具体讲讲
    2023-05-05
  • Springboot集成Minio实现文件上传基本步骤

    Springboot集成Minio实现文件上传基本步骤

    这篇文章主要介绍了Springboot集成Minio实现文件上传基本步骤,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-06-06
  • 深入了解java 8的函数式编程

    深入了解java 8的函数式编程

    函数式编程并不是Java新提出的概念,其与指令编程相比,强调函数的计算比指令的计算更重要;与过程化编程相比,其中函数的计算可以随时调用。下面我们来详细了解一下吧
    2019-06-06
  • java 抽象类与接口的区别总结

    java 抽象类与接口的区别总结

    这篇文章主要介绍了java 抽象类与接口的区别总结的相关资料,需要的朋友可以参考下
    2017-02-02
  • springboot实现指定mybatis中mapper文件扫描路径

    springboot实现指定mybatis中mapper文件扫描路径

    这篇文章主要介绍了springboot实现指定mybatis中mapper文件扫描路径方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Hibernate命名策略详解

    Hibernate命名策略详解

    本文主要介绍了Hibernate命名策略。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • 图解Java经典算法冒泡选择插入希尔排序的原理与实现

    图解Java经典算法冒泡选择插入希尔排序的原理与实现

    冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序
    2022-09-09
  • Java 多线程并发ReentrantLock

    Java 多线程并发ReentrantLock

    这篇文章主要介绍了Java 多线程并发ReentrantLock,Java 提供了 ReentrantLock 可重入锁来提供更丰富的能力和灵活性,感兴趣的小伙伴可以参考一下
    2022-06-06
  • SpringBoot @Retryable注解使用

    SpringBoot @Retryable注解使用

    SpringBoot提供的@Retryable注解可以方便地实现方法的重试机制,可以在不侵入原有逻辑代码的方式下,优雅地实现重处理功能
    2024-12-12

最新评论