如何部署Maven构建的Spring Boot可执行Jar?解决Nexus拒收问题
我碰到过好几个朋友遇到这个问题,本质就是Spring Boot的可执行Jar为了支持直接运行,在文件开头加了一段Shell脚本,这就违反了Nexus对标准Jar格式的校验规则——标准Jar必须以PK(Zip格式的起始标识)开头。给你两个解决方案,优先选第一个,更符合Maven和Nexus的最佳实践:
解决方案1:生成两个Jar(标准Jar用于部署,可执行Jar用于运行)
Spring Boot Maven插件支持同时生成标准Jar和可执行Jar,只需要给可执行Jar添加一个classifier(分类器),这样部署到Nexus的是符合标准格式的原始Jar,而你可以单独使用带分类器的可执行Jar来运行。
修改你的插件配置如下:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.0.2.RELEASE</version> <configuration> <executable>true</executable> <!-- 给可执行Jar指定分类器,比如exec --> <classifier>exec</classifier> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
执行mvn clean deploy后:
- 标准Jar(比如
your-project-1.0.jar)会被部署到Nexus,这个Jar符合标准格式,Nexus会正常接收 - 可执行Jar(比如
your-project-1.0-exec.jar)会作为附属Artifact一起上传到Nexus,你需要的时候可以单独下载它来直接运行
解决方案2:调整Nexus的校验规则(不推荐)
如果你坚持只部署一个可执行Jar,可以修改Nexus中对应的仓库配置,关闭Jar格式的校验。步骤大概是:
- 登录Nexus管理后台
- 找到你要部署的目标仓库(比如Release或Snapshot仓库)
- 进入仓库的「Configuration」配置页面
- 找到「Format Validation」相关选项,关闭对Jar文件的格式校验
但这个方法不推荐,因为它会降低仓库的安全性和规范性,可能允许不符合标准的文件上传,引发后续依赖管理或构建问题。
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

