各位佬,java springboot项目,配置了maven-assembly-plugin打包,但是在执行构建时,报错如下

项目能够编译,并且在其他电脑上能够正常构建,但是唯独在自己电脑不行,先编译,后打包依然会报错,请问各位佬,这个是怎么回事,已经找了很久了,都没有找出问题
各位佬,java springboot项目,配置了maven-assembly-plugin打包,但是在执行构建时,报错如下

项目能够编译,并且在其他电脑上能够正常构建,但是唯独在自己电脑不行,先编译,后打包依然会报错,请问各位佬,这个是怎么回事,已经找了很久了,都没有找出问题
关注兄弟别急,你这情况我之前也遇到过 —— 别人电脑好好的,就自己这儿打包空,找半天找不着原因,急得想砸键盘😂 不过别慌,这种 “环境差异导致的打包问题” 其实有套路可循,咱们一点点捋,保准能揪出症结~
项目能编译、其他电脑能打包,说明代码和核心配置没问题。你这儿报 “archive cannot be empty”(归档空了),本质就是打包时没找到该包含的文件—— 可能是编译好的 class 文件没捡着,也可能是依赖没拉全,或者打包的 “清单” 写漏了东西。
maven-assembly-plugin 就像个 “打包快递员”,得你告诉他 “要装哪些文件” 才行。你先打开项目的 pom.xml,找找 maven-assembly-plugin 的配置块,重点看这两处:
比如有没有配置 descriptorRefs 或者 descriptors?
要是用现成的模板(比如打个包含所有依赖的 jar),得有 <descriptorRef>jar-with-dependencies</descriptorRef> 这句,不然快递员不知道要把依赖也装进去;
要是用了自定义的assembly.xml(比如src/main/assembly/assembly.xml),打开这个文件看看:里面有没有<fileSet>配置?是不是包含了target/classes目录(这是编译好的 class 文件存放的地方)?比如得有类似这样的配置:
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory> <!-- 就是target/classes -->
<outputDirectory>/</outputDirectory> <!-- 把class文件放进根目录 -->
</fileSet>
</fileSets>
要是这部分漏了,快递员就不知道要捡 class 文件,打包自然是空的~
项目能编译,但说不定你本地的 target 目录出了点小问题(比如缓存错乱)。你按这步试试:
mvn clean 清空旧的编译文件(相当于把快递盒清空重弄);mvn compile重新编译,完了去项目里找target/classes文件夹 —— 这里面得有一堆 .class文件(比如你的 Controller、Service 编译后的文件)。Maven 打包时得把依赖也塞进去,要是你本地仓库的依赖文件损坏了,或者没下载全,也可能导致打包空。你可以:
C:\Users\你的用户名\.m2\repository);org/springframework、你自己项目的 groupId 对应的文件夹)—— 别怕删,删了 Maven 会重新下载;mvn clean package -U(-U 是强制更新依赖,相当于 “重新买材料”),看看会不会重新下载依赖,打包时能不能捡着。你说其他电脑能成,那大概率是你本地的 JDK 或 Maven 版本和他们不一样!
问问同事 / 同学用的 JDK 版本(比如 JDK11 还是 17),你也换成一样的(装多个 JDK 的话,记得在 IDE 里切一下项目的 JDK);
Maven 版本也看看,比如别人用 3.8.6,你别用 3.6.0(版本差太多可能有兼容问题)。
怎么看自己的版本?终端里输java -version和mvn -v就行,对比一下就知道了~
要是还搞不定,就让 Maven 把打包时的 “小动作” 都告诉你:终端里执行 mvn clean package -e -X(-X 是打印调试日志,特别详细),然后盯着日志看 —— 重点找 “Looking for files”“Processing dependencies” 这类字眼,看看它到底在找哪些文件,是不是报了 “找不到 xxx.class”“xxx.jar 不存在” 之类的错,一抓一个准!
按这几步查,90% 的问题都能解决~ 我之前那次最后发现是本地 Maven 仓库里一个依赖 jar 坏了,删了重下就好了。你慢慢来,别急,肯定能搞定!有啥具体日志里的坑,随时喊我再帮你瞅~