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

Maven微服务架构下自定义外部Jar作为公共依赖的配置及编译问题

问题修复方案

无法识别lib依赖的根因与解决

你遇到的编译报错核心原因是lib项目使用Spring Boot默认打包插件生成的是可执行Jar,不是可供其他项目依赖的普通Jar:可执行Jar的类文件都存放在BOOT-INF/classes目录下,Maven依赖解析时无法识别该路径下的类。IDE能正常读取是因为直接关联了lib项目的源码目录,未使用本地仓库安装的Jar包。

修复步骤:

  • 若lib项目不需要独立启动运行,直接删除lib项目pom.xml中的spring-boot-maven-plugin插件配置即可
  • 若需要保留lib的可执行能力,修改lib项目的插件配置,增加classifier区分可执行Jar和依赖Jar:
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <excludes>
            <exclude>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </exclude>
        </excludes>
        <classifier>exec</classifier>
    </configuration>
</plugin>

修改完成后重新执行mvn clean install安装lib项目,再编译base项目即可正常识别依赖。

自动编译lib的实现方案

推荐使用Maven多模块聚合架构实现自动按依赖顺序构建:

  1. 新增一个父级POM项目,packaging类型设为pom,将lib、base都作为子模块纳入管理,父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>slt.mytest</groupId>
    <artifactId>mytest-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>libs</module> <!-- 这里的路径要和实际子模块目录对应 -->
        <module>base</module>
    </modules>
    <!-- 可将公共依赖版本、JDK版本等通用配置抽到父POM统一管理 -->
</project>
  1. 调整lib和base的parent配置,继承该父POM,替换原来直接继承的spring-boot-starter-parent(可将spring-boot-starter-parent作为父POM的父级引入)
  2. 需要构建base时,在父项目目录执行命令:mvn clean install -pl base -am,Maven会自动构建base依赖的所有关联模块(包括lib),无需手动提前编译lib。
通用最佳实践
  • 仅作为公共依赖的工具类、DTO模块,不要继承spring-boot-starter-parent,也不要引入Spring Boot打包插件,使用普通Maven Jar项目结构即可,减少不必要的依赖和配置冲突
  • 同一业务域内的关联微服务/模块,优先用Maven多模块架构管理,天然支持依赖顺序构建、版本统一管控,降低依赖冲突概率
  • 如果公共依赖需要跨多个无关项目复用,可搭建私有Maven仓库(如Nexus),公共模块版本更新后发布到私有仓库,其他项目直接拉取对应版本依赖即可,无需本地编译公共模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:04