Debian VPS运行Spring Boot的war包报Exec format错误如何解决?
报错根因
你遇到的-bash: ./odc-central-0.0.1-SNAPSHOT.war: cannot execute binary file: Exec format error报错,和两台设备的CPU架构、操作系统内核版本无关,本质是默认构建的Spring Boot war包未被标记为可执行归档,没有嵌入系统可识别的启动头:
- Spring Boot支持构建直接可执行的jar/war包,原理是在归档文件头部嵌入一段shell启动脚本,让bash可以直接识别为可执行文件运行,无需手动加
java -jar前缀 - 该特性默认关闭,必须在
spring-boot-maven-plugin中显式配置<executable>true</executable>才会在构建时开启
本地未配置也可运行的原因
你的本地Ubuntu系统默认配置了binfmt_misc规则,会自动将后缀为.war/.jar的文件绑定到Java命令执行,因此哪怕归档没有内置启动脚本,直接./xxx.war时系统也会自动调用java -jar运行。而你使用的Debian云服务器默认没有配置该规则,因此会抛出格式错误。
你另一台可直接运行war包的同类VPS,要么是对应应用构建时已经开启了<executable>true配置,要么是系统也配置了对应的binfmt_misc规则。
已验证的解决方案
你补充的配置就是标准解决方案,给spring-boot-maven-plugin添加<executable>true</executable>后,构建出的war包会内置启动脚本,只要给文件授予执行权限chmod +x xxx.war,就可以在所有Linux环境下直接执行,无需额外依赖系统规则。
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> <fork>true</fork> </configuration> </plugin>
内容的提问来源于stack exchange,提问作者Manolo de la Vega
相关产品推荐
相关产品推荐

