CACERTS IntelliJ + Gradle 问题

Issue with CACERTS IntelliJ + Gradle

我目前运行在代理后面进行一些 REST 调用,因此我需要遵循一些严格的流程才能使调用通过。

之前我是在 Eclipse 中为 POC 构建的,但现在我知道它可以工作,我正在尝试将它与 Gradle 一起转移到 IntelliJ(个人最喜欢的 IDEA)以实现构建自动化。

我得到了要编译的项目、导出所有依赖项等...但是当我 运行 它在 IntelliJ 中时,我得到了 "Cert not found error"。然而,在旁注中,如果我使用 "java-jar MyJar.jar" 执行编译的 Jar 文件(来自 gradle),它 运行s 完美并且不会抛出证书错误。这里的关键是,如果我只使用 IntelliJ 之外的 gradle 任务执行 Jar,它就可以工作,但是如果我尝试在 IntelliJ 中构建之后立即执行任务,它就会失败。

作品:

无效: - 在 IntelliJ 中执行构建任务并在构建任务结束时调用 "runMain"

我目前的理论是,运行通过 java -jar 和 gradle 运行Main 将其 运行 化,导致 JVM 使用默认的 cacerts“/jre_xxx/libs/security/cacerts”(我已经在其中添加了证书)但是当我在 IntelliJ 中使用 Gradle 执行 Jar 时,它使用了不同的位置。我也已将证书添加到 "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.1.5\jre64\lib\security\cacerts",但在 IntelliJ 中 运行 宁它时我仍然收到此错误。

task(runMain, dependsOn: 'classes', type: JavaExec) {
     main = 'com.xxx.xx.x.Utopia'
     classpath = sourceSets.main.runtimeClasspath
     args=[
             "-Djavax.net.ssl.trustStore=C:\ProgramFiles\Java\jre1.8.0_121\lib\security\cacerts"
     ]
 }

运行 这个 VIA CLI 似乎可以工作,但不能用于 IntelliJ 中的 Gradle 构建任务。

如有任何帮助,我们将不胜感激。

编辑:我只在 IntelliJ 中 运行 遇到错误(PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径)

就我的问题联系 JetBrains 支持后,我了解到了这个问题。从逻辑上讲,我假设 JRE 会执行 JAR 文件,只有当 运行 java -jar my.jar 或从 CLI 执行 Gradle 时才会出现这种情况。 IntelliJ 的工作方式是它只使用 JDK,所以我不得不修改 JDK 中的小型 JRE。一旦我这样做并将它添加到我的 jdk.xxx/jre/lib/security/cacerts 中找到的 CACERTS,我就能够解决这个问题。

https://youtrack.jetbrains.com/issue/IDEA-195428

好的.. 有时这可能是非常微小的事情,我们往往会忽略总是使用 cacerts 文件路径从你的 jdk>jre>lib>安全文件夹给你 gradle VMOptions 设置。

以防万一有人遇到这个问题。我已将我的证书添加到 JDK 商店并确保 IntelliJ 正在使用 JDK 但是在尝试下载 JAR 时它仍然会失败。结果我不得不在后台杀死 gradle 守护进程 运行,因为它在 IntelliJ 重启之间持续存在。我在 windows 所以 ps java | kill 在 Powershell 中工作。 pkill java 将在 Linux 中工作。

使用内置的 IntelliJ-IDEA 插件信任自定义证书:

https://www.jetbrains.com/help/idea/settings-tools-server-certificates.html