我目前正在代理后面运行一些REST调用,因此我需要遵循一些严格的过程,以便调用通过。
以前,我在Eclipse中为POC构建,但现在我知道了它的工作原理,我正尝试将它与Gradle一起转移到IntelliJ (个人最喜欢的想法),以实现构建自动化。
我让这个项目编译,导出所有的依赖项,等等.但是当我在IntelliJ中运行它时,我会得到一个"Cert“。不过,在附带说明中,如果我使用“java MyJar.jar”执行编译后的Jar文件(来自gradle),它将完美地运行,并且不会抛出cert错误。这里的关键是,如果我只使用IntelliJ之外的gradle任务来执行Jar,那么它就能工作,但是如果我试图在IntelliJ构建之后立即执行任务,它就会失败。
作品:
不工作:-在IntelliJ中执行构建任务并在构建任务结束时调用"runMain“
我目前的理论是,通过java -jar和Gradle runMain运行它,会导致JVM使用默认的仙人掌"/jre_xxx/libs/security/ cacerts“(我已经添加了证书),但是当我在IntelliJ中使用gradle执行Jar时,它使用的是不同的位置。我还将证书添加到"C:\Program \JetBrains\ IntelliJ 2018.1.5\ the 64\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"
]
}通过CLI运行这个任务似乎是可行的,但在IntelliJ中的Gradle构建任务中却从来没有这样做。
任何帮助都将不胜感激。
编辑:只有在IntelliJ中运行时才会得到的错误(PKIX路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法找到被请求目标的有效认证路径)
发布于 2018-07-11 16:09:03
在与我的问题联系JetBrains支持后,我意识到了这个问题。从逻辑上讲,我假设JRE将执行JAR文件,只有在运行java -jar my.jar或从CLI执行Gradle时才是这样。IntelliJ的工作方式是它只使用JDK,所以我不得不修改JDK中的小型JRE。一旦我这样做并将其添加到jdk.xxx/jre/lib/security/cacerts中的CACERTS中,我就能够解决这个问题。
发布于 2020-11-11 05:28:56
万一有人也遇到这个问题。我已经将我的证书添加到JDK存储中,并确保IntelliJ正在使用JDK,但是它在尝试下载JAR时仍然会失败。结果,我不得不杀死在后台运行的gradle deamon,因为它在IntelliJ重新启动之间持久化。我在windows上所以ps java | kill在Powershell里工作。pkill java将在Linux中工作。
发布于 2019-10-17 11:48:10
好的..。有时,这可能是非常微小的事情,我们往往忽略它总是使用从您的jdk>jre>lib>security文件夹到您的VMOptions设置的仙人掌文件路径。
https://stackoverflow.com/questions/51271577
复制相似问题