| 环境 | 版本 |
|---|---|
| 操作系统 | Win10 x64 |
| JDK | AdoptOpenJDK_x64 11 (主)、Oracle JDK8_x64 |
| 文本编辑器 (IDE) | VSCode |
| Shell | PowerShell 7 ( 简称 pwsh ) |
| Gradle | 项目的 Wrapper |
| Socks 服务 | localhost:10808 |
这里的 Shell / OS 也可以用你喜欢的,没有影响。
这里使用 VSCode 而非 Intellij, 因为 IDEA 图形化界面操作起来比较复杂麻烦,也不好确定出错的原因,希望读者能习惯命令行运行 Gradle 的过程。
开始
首先,我不为 Java 设置任何代理设置或额外参数。
我以游戏 Minecraft Forge 模组开发的典型 Java Gradle 构建项目为例子,进行演示。请读者提前去官网下载开发包并解压:

在解压后的目录打开 VSCode, 然后在终端内输入 ./gradlew 走起:

此时屏幕输出 Starting Deamon ... 代表 Gradle 服务运行中
出错范例分析

报错,但提示过于简单。使用指令 ./gradlew --stacktrace 再运行一次:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9EXUVKNu-1591851711656)(main.assets/2020-06-11-11-41-22.png)]](https://i-blog.csdnimg.cn/blog_migrate/a82717f365f2938551c7b3f51c4c3d4c.png)
发现这是证书问题
第二类:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8pn5oE7d-1591851711660)(main.assets/2020-06-11-12-00-02.png)]](https://i-blog.csdnimg.cn/blog_migrate/3e598d053ee2b4613599624b925eb500.png)
大名鼎鼎的 jcenter 库不可能宕机,导致 Read timed out,信号肯定被干扰了。
开启代理
下面配置 Java 代理,设置环境变量
$env:JAVA_TOOL_OPTIONS="-DsocksProxyHost=localhost -DsocksProxyPort=10808"
我推荐使用临时环境变量的方式,使代理再终端运行期内有效:
修改 pwsh profile 里,以后直接运行
Use-Proxy即可 ( 在 > pwsh6 开始,可以输入u-p+ 多次tab快速补全 )在 pwsh 中执行
code $profile, 输入并保存:function Use-Proxy { $env:JAVA_TOOL_OPTIONS = "-DsocksProxyHost=localhost > -DsocksProxyPort=10808" }
重启终端会话,执行 Use-Proxy 后再运行 java:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1M9l3HeZ-1591851711666)(main.assets/2020-06-11-12-10-25.png)]](https://i-blog.csdnimg.cn/blog_migrate/9d11ade0207758b82d287a27ad660237.png)
如图说明代理已配置。
十分注意: 我认为 deamon 守护进程的运作模式可能与代理发生意向不到的作用,所以我推荐你关闭守护进程来进行操作,直到项目能正常构建为止。
解决证书问题
报错特征:
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
首先推荐大家下载两个开源项目:
- Java SSL 测试工具: https://github.com/MichalHecko/SSLPoke
- 根据所给 URL 自动下载签名证书并录入证书库文件: https://github.com/escline/InstallCert
- 点击项目 SSLPoke 下的 release 下载 .jar 文件保存
- git clone InstallCert
- 推荐把 SSLPoke.jar 放到 InstallCert 同一目录下
- 在目录内打开终端
下面举个例子:如何解决访问 baidu.com 证书错误。
- 使用 SSLPoke 测试连接到百度
java -jar .\SSLPoke.jar <主机名> 443
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XwRdzpKV-1591851711668)(main.assets/2020-06-11-12-42-43.png)]](https://i-blog.csdnimg.cn/blog_migrate/cd22d3454c53bff89345f3cb467f3ab2.png)
-
执行
java .\InstallCert.java <主机名>下载网站证书java 11 版本一下必须先编译
.java后才能运行![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3n3VIh0R-1591851711673)(main.assets/2020-06-11-12-45-56.png)]](https://i-blog.csdnimg.cn/blog_migrate/a90b69e38dca07b4e6696bf1f227fa7c.png)
-
小程序将输出所有证书列表,输入数字键自动导入证书。如果有多个网站证书,请重复步骤 3
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7fK0tRhs-1591851711675)(main.assets/2020-06-11-12-47-12.png)]](https://i-blog.csdnimg.cn/blog_migrate/76e5ba1146fa4b930bc8255e988140dc.png)
-
成功效果:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ujA3i9bf-1591851711677)(main.assets/2020-06-11-12-55-12.png)]](https://i-blog.csdnimg.cn/blog_migrate/4403beb5b37f9acc01461bdb7178ea35.png)
其他故障排查
关闭 Gradle 后台守护进程
./gradlew --stop
一次性禁止:启动时带上参数 --no-daemon
永久禁止:在 gradle.properties 中写入 org.gradle.daemon=false
大功告成
输入 ./gradlew tasks

有问题欢迎 PM 我,我尽量期末有空后解答大家问题

本文手把手教你解决Java Gradle项目构建中遇到的代理、证书问题。通过配置环境变量、使用SSL测试工具及关闭Gradle守护进程等方法,确保项目能正常构建。
1329

被折叠的 条评论
为什么被折叠?



