2020 手把手解决 Java Gradle 项目构建遇到的问题

本文手把手教你解决Java Gradle项目构建中遇到的代理、证书问题。通过配置环境变量、使用SSL测试工具及关闭Gradle守护进程等方法,确保项目能正常构建。
环境版本
操作系统Win10 x64
JDKAdoptOpenJDK_x64 11 (主)、Oracle JDK8_x64
文本编辑器 (IDE)VSCode
ShellPowerShell 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)]

发现这是证书问题


第二类:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8pn5oE7d-1591851711660)(main.assets/2020-06-11-12-00-02.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)]

如图说明代理已配置。

十分注意: 我认为 deamon 守护进程的运作模式可能与代理发生意向不到的作用,所以我推荐你关闭守护进程来进行操作,直到项目能正常构建为止。

解决证书问题

报错特征:

javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

首先推荐大家下载两个开源项目:

  1. 点击项目 SSLPoke 下的 release 下载 .jar 文件保存
  2. git clone InstallCert
  3. 推荐把 SSLPoke.jar 放到 InstallCert 同一目录下
  4. 在目录内打开终端

下面举个例子:如何解决访问 baidu.com 证书错误。

  1. 使用 SSLPoke 测试连接到百度 java -jar .\SSLPoke.jar <主机名> 443

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XwRdzpKV-1591851711668)(main.assets/2020-06-11-12-42-43.png)]

  1. 执行 java .\InstallCert.java <主机名> 下载网站证书

    java 11 版本一下必须先编译 .java 后才能运行

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3n3VIh0R-1591851711673)(main.assets/2020-06-11-12-45-56.png)]

  2. 小程序将输出所有证书列表,输入数字键自动导入证书。如果有多个网站证书,请重复步骤 3

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7fK0tRhs-1591851711675)(main.assets/2020-06-11-12-47-12.png)]

  3. 成功效果:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ujA3i9bf-1591851711677)(main.assets/2020-06-11-12-55-12.png)]

其他故障排查

关闭 Gradle 后台守护进程

./gradlew --stop

一次性禁止:启动时带上参数 --no-daemon

永久禁止:在 gradle.properties 中写入 org.gradle.daemon=false

大功告成

输入 ./gradlew tasks

在这里插入图片描述
有问题欢迎 PM 我,我尽量期末有空后解答大家问题

参考

https://confluence.atlassian.com/kb/unable-to-connect-to-ssl-services-due-to-pkix-path-building-failed-error-779355358.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值