启动Grails 3.3.2时出现Unknown Host (504)错误求助
Grails 3.3.2 启动时 Unknown Host (504) 错误的解决建议
根据你描述的情况——在Mac代理环境下启动Grails 3.3.2时遇到504未知主机错误,且已在Grails脚本中配置了GRAILS_OPTS代理参数但问题依旧,结合报错栈信息(底层是Aether依赖解析时的网络请求失败),我整理了以下几个排查和解决方向:
1. 先确认代理参数的准确性
首先要确保你配置的代理地址和端口是完全正确的:
- 检查
myHttpProxy和myHttpsProxy是否是实际可用的代理服务器地址,有没有拼写错误(比如漏写域名后缀、IP写错) - 验证代理端口是否匹配,比如HTTP代理是否真的监听8000端口,HTTPS代理是否是443。可以用
curl测试代理能否访问Grails的仓库:
如果测试失败,说明代理本身不可用,需要先解决代理的连通性问题curl -x http://myHttpProxy:8000 https://repo.grails.org - 如果你的代理需要账号密码认证,记得在
GRAILS_OPTS里补充认证参数:export GRAILS_OPTS="-Dhttp.proxyHost=myHttpProxy -Dhttp.proxyPort=8000 -Dhttp.proxyUser=your-username -Dhttp.proxyPassword=your-password -Dhttps.proxyHost=myHttpsProxy -Dhttps.proxyPort=443 -Dhttps.proxyUser=your-username -Dhttps.proxyPassword=your-password"
2. 确认GRAILS_OPTS配置是否生效
有时候修改脚本后环境变量不会立即生效,你可以先在终端里直接执行echo $GRAILS_OPTS,看看输出是否包含你设置的所有代理参数:
- 如果输出为空或者不完整,说明脚本修改没生效。可以尝试:
- 重新打开终端窗口,让环境变量重新加载
- 或者直接在当前终端临时设置
GRAILS_OPTS,然后再运行Grails命令测试:export GRAILS_OPTS="-Dhttp.proxyHost=myHttpProxy -Dhttp.proxyPort=8000 -Dhttps.proxyHost=myHttpsProxy -Dhttps.proxyPort=443" grails --stacktrace --verbose
3. 尝试通过Maven settings.xml配置代理
Grails底层依赖Maven的Aether来解析依赖,直接配置Maven的代理可能比GRAILS_OPTS更可靠:
- 找到Maven的配置文件路径:通常是
~/.m2/settings.xml,如果没有这个文件,直接创建一个 - 添加代理配置到
settings.xml中:<settings> <proxies> <!-- HTTP代理配置 --> <proxy> <id>http-proxy</id> <active>true</active> <protocol>http</protocol> <host>myHttpProxy</host> <port>8000</port> <!-- 有认证需求的话取消下面两行注释 --> <!-- <username>your-proxy-username</username> --> <!-- <password>your-proxy-password</password> --> <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts> </proxy> <!-- HTTPS代理配置 --> <proxy> <id>https-proxy</id> <active>true</active> <protocol>https</protocol> <host>myHttpsProxy</host> <port>443</port> <!-- 有认证需求的话取消下面两行注释 --> <!-- <username>your-proxy-username</username> --> <!-- <password>your-proxy-password</password> --> <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts> </proxy> </proxies> </settings> - 保存文件后,重新运行Grails命令,看是否能正常启动
4. 排查网络和防火墙限制
- 确认代理服务器本身是可达的:可以尝试
ping myHttpProxy(如果代理服务器允许ICMP请求),或者用telnet测试端口连通性:telnet myHttpProxy 8000 - 检查Mac系统防火墙是否阻止了Grails的网络请求:打开「系统设置」→「网络」→「防火墙」,确认Grails相关进程被允许访问网络
- 确认代理服务器没有限制对Grails仓库域名的访问:比如
repo.grails.org、repo.maven.apache.org这些Maven仓库地址,需要确保代理允许访问这些域名
5. 清理本地缓存后重试
有时候本地缓存的依赖文件可能损坏或者不完整,导致Grails启动时请求失败:
- 删除Grails的本地缓存目录:
rm -rf ~/.grails - 删除Gradle的本地缓存目录:
rm -rf ~/.gradle - 然后重新运行Grails命令,让它重新下载所有依赖
内容的提问来源于stack exchange,提问作者imarchuang
相关产品推荐
相关产品推荐

