You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建多模块Spring/Maven项目为独立可执行Jar?构建报错排查

Maven多模块依赖找不到的常见原因及解决方法

以下是导致com.example:example-commons:jar:1.0找不到的几个核心问题,对应解决方式如下:

  • 父POM未正确声明子模块
    父pom.xml的<modules>标签必须包含所有子模块,尤其是commons模块。如果没声明,Maven在构建时会跳过commons模块的编译打包,本地仓库自然没有这个依赖。示例配置:

    <modules>
        <module>commons</module>
        <module>infrastructure</module>
        <module>data</module>
        <module>backend</module>
    </modules>
    
  • commons模块被打成了可执行Fat Jar
    commons是库模块,不能用spring-boot-maven-plugin的默认配置(默认会生成可执行Fat Jar),这种Jar无法被其他模块作为依赖引用。需要修改commons的pom.xml:

    • 要么移除spring-boot-maven-plugin,改用普通的maven-jar-plugin;
    • 要么保留spring-boot-maven-plugin,但添加classifier配置,让它生成两个Jar(一个可执行、一个普通库):
      <build>
          <plugins>
              <plugin>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-maven-plugin</artifactId>
                  <configuration>
                      <classifier>exec</classifier>
                  </configuration>
              </plugin>
          </plugins>
      </build>
      
  • 构建命令执行位置错误
    必须在父POM所在的根目录执行mvn clean package -Pproduction,不能直接在backend模块目录下执行。否则Maven只会构建backend模块,不会自动构建依赖的commons模块,导致本地仓库缺失commons的Jar。

  • production Profile干扰了依赖或模块构建
    检查父POM或各子模块的POM中,production profile是否有以下情况:

    • 修改了commons模块的依赖版本;
    • 排除了commons依赖;
    • 配置了仅在特定profile下才构建commons模块。
  • 本地仓库无commons模块的Jar
    先在根目录执行mvn clean install,将所有子模块安装到本地Maven仓库,之后再执行package命令。因为package仅完成打包,不会把模块安装到本地仓库,其他模块依赖时会找不到。

内容的提问来源于stack exchange,提问作者jnemecz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:40:05