IntelliJ构建Gradle项目报错:Cannot invoke "java.security.KeyStore.size()"因为this.myKeyStore为空
针对你遇到的"Cannot invoke "java.security.KeyStore.size()" because "this.myKeyStore" is null"错误,结合Gradle 6.8.1和Java 9.0.4的环境,试试下面这些方案:
确认Java信任库路径正确性
确保JAVA_HOME环境变量指向的是正确的Java 9.0.4安装目录,避免系统中其他JDK版本的信任库干扰。可以在终端运行echo $JAVA_HOME(Linux/macOS)或echo %JAVA_HOME%(Windows)验证路径。
手动指定信任库路径,在Gradle构建时添加启动参数:./gradlew build -Djavax.net.ssl.trustStore=$JAVA_HOME/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=changeit修复或替换损坏的cacerts文件
先检查Java 9自带的cacerts是否损坏,运行:keytool -list -keystore $JAVA_HOME/lib/security/cacerts输入默认密码
changeit,如果命令报错,说明文件损坏。可以从同版本的Java 9安装包中提取正常的cacerts文件替换,或者从其他正常运行的Java 9环境复制。
也可以重新生成PKCS12格式的信任库:keytool -importkeystore -srckeystore $JAVA_HOME/lib/security/cacerts -destkeystore ~/new_cacerts -deststoretype pkcs12之后在Gradle参数中指定这个新文件:
-Djavax.net.ssl.trustStore=~/new_cacerts配置Gradle全局或项目级SSL参数
在项目根目录的gradle.properties中添加以下配置,持久化指定信任库:systemProp.javax.net.ssl.trustStore=/path/to/your/java9/lib/security/cacerts systemProp.javax.net.ssl.trustStorePassword=changeit或者在
build.gradle中为所有Java执行任务配置:tasks.withType(JavaExec) { systemProperty 'javax.net.ssl.trustStore', System.getProperty('java.home') + '/lib/security/cacerts' systemProperty 'javax.net.ssl.trustStorePassword', 'changeit' }清理Gradle缓存并刷新依赖
运行以下命令清理Gradle本地缓存,强制重新拉取依赖,避免缓存中损坏的SSL相关数据:./gradlew clean build --refresh-dependencies
内容的提问来源于stack exchange,提问作者Sushant Khursale

