【发布时间】:2018-07-10 18:02:17
【问题描述】:
我目前正在代理后面运行一些 REST 调用,因此我需要遵循一些严格的流程才能使调用通过。
以前我在 Eclipse 中构建 POC,但现在我知道它可以工作,我正在尝试将它与 Gradle 一起转移到 IntelliJ(个人最喜欢的 IDEA)以实现构建自动化。
我让项目编译、导出所有依赖项等...但是当我在 IntelliJ 中运行它时,我收到“未找到证书错误”。然而,附带说明一下,如果我使用“java-jar MyJar.jar”执行编译的 Jar 文件(来自 gradle),它会完美运行并且不会引发 cert 错误。这里的关键是,如果我只使用 IntelliJ 之外的 gradle 任务执行 Jar,它可以工作,但如果我尝试在 IntelliJ 中构建后立即执行任务,它会失败。
作品:
- 通过 CLI 手动执行从 Gradle 构建任务创建的 jar
- 使用“gradle runMain”VIA CLI 执行下面的 gradle 任务
不起作用: - 在 IntelliJ 中执行构建任务并在构建任务结束时调用“runMain”
我目前的理论是,通过 java -jar 和 gradle runMain 运行它会导致 JVM 使用默认的 cacerts“/jre_xxx/libs/security/cacerts”(我已经添加了证书)但是当我执行带有 Gradle 的 IntelliJ 中的 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:无法找到请求目标的有效认证路径)
【问题讨论】:
-
下载和安装根证书有帮助吗?
-
我已经使用 java keytool 下载并安装了根证书,并使用密钥资源管理器验证它确实存在。基本上它可以在 IntelliJ 之外运行,但是如果我尝试在 IntelliJ 中运行 gradle(build 或 runMain),我会收到证书错误,这让我认为 IntelliJ 没有使用正确的 cacerts。
-
我收到一封来自 JetBrains 支持的电子邮件,表明最上面的证书是问题所在。如果您拥有正确的证书,IntelliJ 会正确执行此操作。我在 Gradle b/c 上遇到了这个问题,我没有最高证书。单击证书路径而不是详细信息复制到文件。
-
您建议我将最顶层的证书添加到默认的 Java CACERT (jre_xxx/lib/security) 还是应该将其添加到 IntelliJ/jre64/lib/security.cacert 的 IntelliJ?跨度>
-
编辑:我添加了最顶层的证书,我获得了最高的树值并将其添加到两个 cacerts 但我仍然收到完全相同的问题。
标签: java gradle intellij-idea javaexec-gradle-plugin