Grails2.5.0容器化打包无法下载hibernate4等插件依赖问题求助
问题根因
你遇到的SSL握手失败问题核心由两点导致:
- 所用的
proactivehk/grails:2.5.0镜像内置旧版OpenJDK 7,自带的CA根证书库未收录Grails官方仓库当前SSL证书的信任链,即使指定TLS协议版本也无法解决证书不信任的问题 - 本地Windows环境可正常构建,要么是系统/IDE所用的JDK版本更高、证书库已更新,要么是依赖已经提前缓存到本地,不需要发起公网请求
解决方案
方案1:替换公网仓库地址(最快生效)
修改grails-app/conf/BuildConfig.groovy的repositories块,注释掉默认的grailsCentral(),替换为HTTP协议的Grails插件仓库,避开SSL校验:
repositories { inherits true grailsPlugins() grailsHome() mavenLocal() // 注释掉默认的HTTPS仓库 // grailsCentral() // 替换为HTTP协议的官方插件仓库 mavenRepo "http://repo.grails.org/grails/plugins-releases/" mavenRepo "our maven Repo" mavenCentral() }
如果有内部镜像源,也可以替换为内部的Grails插件镜像地址,同时建议把私有仓库的配置提到最前面,优先从内部拉取依赖,减少公网请求。
方案2:更新镜像内JDK证书库(保留HTTPS协议)
修改Dockerfile,在构建阶段更新系统CA证书并同步到JDK的信任证书库:
FROM proactivehk/grails:2.5.0 # 更新系统CA证书并同步到JDK证书库 RUN apt-get update && apt-get install -y ca-certificates && \ update-ca-certificates && \ cp /etc/ssl/certs/java/cacerts $JAVA_HOME/jre/lib/security/cacerts WORKDIR /app COPY . . CMD grails -Dhttps.protocols=TLSv1.2 prod war
方案3:依赖预先缓存(最稳妥,适合企业内部场景)
将所有需要的Grails插件上传到你配置的内部私有Maven仓库,构建时直接从内部仓库拉取依赖,完全不需要访问公网Grails仓库,从根源避免网络和证书问题。
内容的提问来源于stack exchange,提问作者Faxon
相关产品推荐
相关产品推荐

