Heroku部署Gradle Spring Boot应用失败求助:sh\r不存在错误
解决Gradle Spring Boot项目部署Heroku时的
sh\r找不到错误 这个报错/usr/bin/env: ‘sh\r’: No such file or directory的根源很明确——你的项目里的gradlew脚本使用了Windows风格的CRLF换行符,而Heroku运行的是Linux环境,只支持Unix风格的LF换行符。Linux系统会把脚本第一行#!/usr/bin/env sh里的\r当成命令名的一部分,所以找不到sh\r这个命令。
下面是具体的解决步骤:
1. 修复gradlew的换行符
方法一:用Git自动修复并提交
如果你的项目用Git管理,可以直接用Git的换行符配置来修复:
- 先设置Git提交时自动转换CRLF为LF:
git config core.autocrlf input - 然后重新标准化项目里的换行符并提交:
git add --renormalize . git commit -m "Fix line endings for gradlew script" git push heroku main
方法二:手动用编辑器修改
如果不用Git,直接用代码编辑器修改gradlew的换行符:
- VS Code:打开
gradlew后,点击右下角的「CRLF」按钮,切换为「LF」,然后保存文件。 - Notepad++:打开文件后,点击「编辑」→「文档格式转换」→「转为UNIX格式」,保存即可。
2. 验证脚本的首行
确保gradlew的第一行是正确的shebang,没有多余字符:
#!/usr/bin/env sh
这行必须是文件的第一行,前面不能有空格、空行或者其他字符。
3. 提前预防后续问题
在项目根目录创建.gitattributes文件,添加以下内容,强制脚本类文件使用LF换行符:
*.sh text eol=lf gradlew text eol=lf
这样以后无论在哪个系统上修改文件,Git都会自动保持LF换行符,避免再出现类似问题。
做完这些步骤后,重新推送代码到Heroku,应该就能正常构建了。
内容的提问来源于stack exchange,提问作者Ederson Coelho
相关产品推荐
相关产品推荐

