You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle发布版本目录至Nexus报错:NoSuchAlgorithmException

问题:Gradle版本目录发布至Nexus仓库时出现NoSuchAlgorithmException错误

执行gradlew publish命令发布Gradle版本目录到Nexus仓库时,抛出java.security.NoSuchAlgorithmException错误,无法完成发布。但将仓库改为mavenLocal()时,版本目录可正常发布至本地Maven仓库。

另外,配置完全一致的自定义Gradle插件能成功发布到同一Nexus仓库,添加堆栈跟踪后发现错误由SSLContext.getDefault()抛出。

版本目录发布脚本(原错误脚本)

buildscript {
    dependencies {
        classpath("com.android.tools.build:gradle:7.2.0")
    }

}
plugins {
    id ("version-catalog")
    id ("maven-publish")
}
catalog {
    versionCatalog {
        from(files("gradle/libs.versions.toml"))
    }
}

publishing {
    publications {
        create<MavenPublication>("VersionCatalog") {
            groupId = "com.phinneyridge"
            artifactId = "com.phinneyridge.version.catalog"
            version = "1.0.0"
            from(components["versionCatalog"])
        }
        repositories {
            maven {
                name = "PhinneyRidgeRepository"
                url = uri(System.getenv()["PhinneyRidgeReleaseRepoUrl"].toString())
                credentials {
                    username = System.getenv().get("PhinneyRidgeRepoUser").toString()
                    password = System.getenv().get("PhinneyRidgeRepoUserPW").toString()
                }
                println(url)
                println(credentials.username + ":" + credentials.password)
            }
        }
    }
}

可正常发布的Gradle插件脚本

plugins {
    id ("java-gradle-plugin")

    "java-library"
    id ("maven-publish")
    id("com.gradle.plugin-publish") version "0.20.0"
    id("org.jetbrains.kotlin.jvm") version "1.6.20"
    id("org.gradle.kotlin.kotlin-dsl") version "2.1.7"
}
gradlePlugin {
    group = "com.phinneyridge"
    plugins {
        create("PhinneyRidgePlugin") {
            id = "com.phinneyridge.project"
            implementationClass = "com.phinneyridge.android.gradle.PhinneyRidgeProjectPlugin"
        }
        create("PhinneyRidgeAndroidAppPlugin") {
            id = "com.phinneyridge.android.application"
            implementationClass = "com.phinneyridge.android.gradle.PhinneyRidgeAndroidAppPlugin"
        }
        create("PhinneyRidgeAndroidLibPlugin") {
            id = "com.phinneyridge.android.library"
            implementationClass = "com.phinneyridge.android.gradle.PhinneyRidgeAndroidLibPlugin"
        }
        create("PhinneyRidgeAndroidKotlinAppPlugin") {
            id = "com.phinneyridge.android.kotlin.application"
            implementationClass = "com.phinneyridge.android.gradle.PhinneyRidgeAndroidKotlinAppPlugin"
        }
        create("PhinneyRidgeAndroidKotlinLibPlugin") {
            id = "com.phinneyridge.android.kotlin.library"
            implementationClass = "com.phinneyridge.android.gradle.PhinneyRidgeAndroidKotlinLibPlugin"
        }
        create("PhinneyRidgeJavaAppPlugin") {
            id = "com.phinneyridge.java.application"
            implementationClass = "com.phinneyridge.android.gradle.PhinneyRidgeJavaAppPlugin"
        }
        create("PhinneyRidgeJavaLibPlugin") {
            id = "com.phinneyridge.java.library"
            implementationClass = "com.phinneyridge.android.gradle.PhinneyRidgeJavaLibPlugin"
        }
        create("PhinneyRidgeJavaKotlinAppPlugin") {
            id = "com.phinneyridge.java.kotlin.application"
            implementationClass = "com.phinneyridge.android.gradle.PhinneyRidgeJavaKotlinAppPlugin"
        }
        create("PhinneyRidgeJavaKotlinLibPlugin") {
            id = "com.phinneyridge.java.kotlin.library"
            implementationClass = "com.phinneyridge.android.gradle.PhinneyRidgeJavaKotlinLibPlugin"
        }
        create("PhinneyRidgeDSAnnotations") {
            id = "com.phinneyridge.dsannotations"
            implementationClass = "com.phinneyridge.osgi.DSAnnotations"
        }
        create("Aar2Jar") {
            id = "com.phinneyridge.aar2jar"
            implementationClass = "com.phinneyridge.android.Aar2Jar"
        }
    }
}
group = "com.phinneyridge"
version = "1.0.0"
publishing {
    repositories {
       maven {
           url = uri(System.getenv().get("PhinneyRidgeReleaseRepoUrl").toString())
            credentials {
                username = System.getenv().get("PhinneyRidgeRepoUser").toString()
                password = System.getenv().get("PhinneyRidgeRepoUserPW").toString()
            }
        }
    }
}
dependencies {
    implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
    gradleApi();
    implementation ("com.android.tools.build:gradle:7.1.3")
    implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.20")
}

原因分析

  • 版本目录发布脚本中,repositories块被错误嵌套在publications内部,Gradle处理时会出现配置上下文异常,当连接HTTPS的Nexus仓库时,异常会触发SSL上下文初始化失败,进而抛出NoSuchAlgorithmException。
  • 本地Maven仓库不需要SSL加密连接,所以错误配置不会暴露;而插件脚本的repositories是正确放在publishing根级别下,与publications同级,因此能正常发布。

解决办法

修改版本目录发布脚本,将repositories块从publications内部移出,放在publishing根级别,与publications同级:

修改后的版本目录发布脚本

buildscript {
    dependencies {
        classpath("com.android.tools.build:gradle:7.2.0")
    }

}
plugins {
    id ("version-catalog")
    id ("maven-publish")
}
catalog {
    versionCatalog {
        from(files("gradle/libs.versions.toml"))
    }
}

publishing {
    publications {
        create<MavenPublication>("VersionCatalog") {
            groupId = "com.phinneyridge"
            artifactId = "com.phinneyridge.version.catalog"
            version = "1.0.0"
            from(components["versionCatalog"])
        }
    }
    // 将repositories移到publications外部,与publications同级
    repositories {
        maven {
            name = "PhinneyRidgeRepository"
            url = uri(System.getenv()["PhinneyRidgeReleaseRepoUrl"].toString())
            credentials {
                username = System.getenv().get("PhinneyRidgeRepoUser").toString()
                password = System.getenv().get("PhinneyRidgeRepoUserPW").toString()
            }
            println(url)
            println(credentials.username + ":" + credentials.password)
        }
    }
}

修改后重新执行gradlew publish命令即可正常发布版本目录到Nexus仓库。

内容的提问来源于stack exchange,提问作者Tom Rutchik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:06:27