陈ker 2025-10-14 17:07 采纳率: 0%
浏览 10

maven-assembly-plugin打包报错

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

img

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

  • 写回答

6条回答 默认 最新

  • 青云交 优质创作者: 大数据技术领域 2025-10-15 12:30
    关注

    兄弟别急,你这情况我之前也遇到过 —— 别人电脑好好的,就自己这儿打包空,找半天找不着原因,急得想砸键盘😂 不过别慌,这种 “环境差异导致的打包问题” 其实有套路可循,咱们一点点捋,保准能揪出症结~

    先给你吃个定心丸:问题大概率出在 “本地环境” 或 “配置细节” 上

    项目能编译、其他电脑能打包,说明代码和核心配置没问题。你这儿报 “archive cannot be empty”(归档空了),本质就是打包时没找到该包含的文件—— 可能是编译好的 class 文件没捡着,也可能是依赖没拉全,或者打包的 “清单” 写漏了东西。

    第一步:先看看打包的 “清单” 是不是漏东西了(assembly 配置)

    maven-assembly-plugin 就像个 “打包快递员”,得你告诉他 “要装哪些文件” 才行。你先打开项目的 pom.xml,找找 maven-assembly-plugin 的配置块,重点看这两处:

    1. 是不是没说清 “要打包啥”?

    比如有没有配置 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 目录出了点小问题(比如缓存错乱)。你按这步试试:

    1. 找到项目根目录,右键选 “在终端中打开”(或者用 IDE 里的 Terminal);
    2. 先执行 mvn clean 清空旧的编译文件(相当于把快递盒清空重弄);
    3. 再执行mvn compile重新编译,完了去项目里找target/classes文件夹 —— 这里面得有一堆 .class文件(比如你的 Controller、Service 编译后的文件)。
      • 要是这儿是空的,说明编译看着成功,其实没生成文件(可能是本地 JDK 版本和代码不兼容,比如代码用了 JDK17 的语法,你装的是 JDK8);
      • 要是有文件,那说明编译没问题,问题出在打包时没 “捡” 到这些文件。

    第三步:看看本地依赖是不是 “坏了”

    Maven 打包时得把依赖也塞进去,要是你本地仓库的依赖文件损坏了,或者没下载全,也可能导致打包空。你可以:

    1. 先找到本地 Maven 仓库的位置(一般是 C:\Users\你的用户名\.m2\repository);
    2. 删掉和你项目相关的依赖文件夹(比如 org/springframework、你自己项目的 groupId 对应的文件夹)—— 别怕删,删了 Maven 会重新下载;
    3. 回到终端,执行 mvn clean package -U-U 是强制更新依赖,相当于 “重新买材料”),看看会不会重新下载依赖,打包时能不能捡着。

    第四步:最容易忽略的 —— 环境版本是不是和别人 “不一样”

    你说其他电脑能成,那大概率是你本地的 JDK 或 Maven 版本和他们不一样!

    • 问问同事 / 同学用的 JDK 版本(比如 JDK11 还是 17),你也换成一样的(装多个 JDK 的话,记得在 IDE 里切一下项目的 JDK);

    • Maven 版本也看看,比如别人用 3.8.6,你别用 3.6.0(版本差太多可能有兼容问题)。

      怎么看自己的版本?终端里输java -versionmvn -v就行,对比一下就知道了~

    最后一招:让打包过程 “说人话”,看详细日志

    要是还搞不定,就让 Maven 把打包时的 “小动作” 都告诉你:终端里执行 mvn clean package -e -X-X 是打印调试日志,特别详细),然后盯着日志看 —— 重点找 “Looking for files”“Processing dependencies” 这类字眼,看看它到底在找哪些文件,是不是报了 “找不到 xxx.class”“xxx.jar 不存在” 之类的错,一抓一个准!

    按这几步查,90% 的问题都能解决~ 我之前那次最后发现是本地 Maven 仓库里一个依赖 jar 坏了,删了重下就好了。你慢慢来,别急,肯定能搞定!有啥具体日志里的坑,随时喊我再帮你瞅~

    评论

报告相同问题?

问题事件

  • 创建了问题 10月14日