如何让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流程完成后,手动调整文件结构:- 创建
squashfs-root/jar目录 - 将指定路径的Jar移动到该目录
- 删除原部署路径的冗余内容,确保最终包中仅保留单个目标Jar
- 创建
注意:请确认你的实际路径为
deployments(原提问中拼写为deplyoments,需修正),否则会导致找不到Jar文件。
内容的提问来源于stack exchange,提问作者Christofer Dutz
相关产品推荐
相关产品推荐

