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

如何让Snapcraft Maven插件仅打包指定Maven构件?

解决多模块SpringBoot项目Snap打包仅保留指定Jar的问题

针对core22环境下Maven插件无法使用maven-options的情况,可通过以下配置实现构建整个项目但仅打包指定Jar的需求:

修改后的Snapcraft配置

parts:
  build:
    plugin: maven
    source: .
    source-type: local
    build-packages:
      - openjdk-17-jdk-headless
      - maven
    stage-packages:
      - openjdk-17-jre-headless
    # 执行完整的多模块项目构建
    goals:
      - clean
      - install
    # 仅保留目标Jar和JRE依赖文件,排除其他模块产物
    stage:
      - deployments/snap-deployment/application/target/*.jar
      - usr/lib/jvm/java-17-openjdk-amd64/**
      - usr/share/java/**
    # 调整Jar输出路径到squashfs-root/jar,并清理冗余文件
    override-stage: |
      craftctl default
      # 创建目标jar目录
      mkdir -p $CRAFT_STAGE/jar
      # 将指定Jar移动到jar目录(确保该路径下只有一个Jar)
      mv $CRAFT_STAGE/deployments/snap-deployment/application/target/*.jar $CRAFT_STAGE/jar/
      # 删除原部署路径的冗余文件
      rm -rf $CRAFT_STAGE/deployments

配置说明

  • goals: clean install:触发Maven对整个多模块项目的完整构建,保证所有基础模块和部署模块都被正确编译、安装,避免依赖缺失。
  • stage字段:精确控制要打包到stage阶段的文件,只保留目标Jar和JRE运行时依赖,其他模块的Jar会被自动排除。
  • override-stage脚本:在默认stage流程完成后,手动调整文件结构:
    1. 创建squashfs-root/jar目录
    2. 将指定路径的Jar移动到该目录
    3. 删除原部署路径的冗余内容,确保最终包中仅保留单个目标Jar

注意:请确认你的实际路径为deployments(原提问中拼写为deplyoments,需修正),否则会导致找不到Jar文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:05:02