Spring Boot客户端项目可运行但Maven打包失败求助
你遇到的这个情况其实挺常见——IDEA能正常跑起来,但Maven打包就报错,核心原因是IDEA会直接读取同工程里Server项目的源码来解析依赖,但Maven打包时只会从本地仓库或远程仓库查找已构建好的依赖包。下面是具体的解决步骤:
第一步:先把Server项目安装到本地Maven仓库
打开终端,进入Server项目的根目录(就是包含Server的pom.xml的文件夹),执行以下命令:mvn clean install这个命令会编译Server项目,把生成的jar包安装到你的本地Maven仓库里,这样Client打包时就能找到这个依赖了。
第二步:核对Client的pom依赖配置
确认Client的pom.xml里Server的依赖信息(groupId、artifactId、version)和Server项目的pom.xml完全一致,比如Server的pom里是不是确实写了:<groupId>ru.urfu</groupId> <artifactId>Server</artifactId> <version>0.0.1-SNAPSHOT</version>任何拼写错误都会导致Maven找不到依赖。
第三步:推荐用Maven多模块管理项目(可选但更规范)
既然Server和Client是同工程下的两个项目,把它们放到同一个Maven父模块下会更省心,这样Maven打包时会自动先构建Server再构建Client,不用手动执行install。具体操作:- 在工程根目录(
TanksOnline)下创建一个父pom.xml,内容如下:<?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>ru.urfu</groupId> <artifactId>TanksOnline</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>Server</module> <module>Client</module> </modules> </project> - 修改Server和Client的
pom.xml,添加parent节点指向这个父pom:<parent> <groupId>ru.urfu</groupId> <artifactId>TanksOnline</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> - 之后在工程根目录执行
mvn clean package,Maven会自动按顺序构建两个项目。
- 在工程根目录(
第四步:检查包导入路径
确认Client代码里导入的ru.urfu.Server.GameLogic.GameBoard确实是Server项目中存在的包,有没有大小写错误或者路径写错的情况。最后一步:刷新Client的Maven依赖
在IDEA里打开Maven面板,点击Client项目旁边的刷新按钮(🔄),确保Maven已经加载到本地仓库里的Server依赖,然后再执行mvn clean package试试。
内容的提问来源于stack exchange,提问作者Simon Rusinov

