Gradle 6.2.2 破坏了我的 bintray 发布(工件名称而不是版本号)

Gradle 6.2.2 broke my bintray publishing (artifact names instead of version numbers)

自从更新到 gradle 6.2.2 后,bintray 发布变得疯狂。 Bintray 显示工件名称而不是版本号,库无法使用。

有没有人经历过或知道为什么会这样?

编辑:切换到 5.6.3 gradle 包装器将按预期上传库(没有 artifact/version 编号命名问题)

较新的 Gradle 版本也发布了更安全的校验和。 Bintray 无法识别这些校验和,因此它假定存在另一个版本的工件。您应该注意到所有语义版本实际上都是完整的,您可以删除非版本。

要禁止发布这些校验和,您可以将以下内容添加到您的 gradle 属性中。

systemProp.org.gradle.internal.publish.checksums.insecure=true

Gradle 团队率先将 .md5 & .sha1 替换为 .sha256 & .sha512

我不知道是谁给了他们那个“权利”,适当的安全性只是包签名,所以我看不出有什么理由进行这种重大改变(为什么要推动 Apache & Sonatype & JFrog 修补他们的软件??) .

src/dependency-management/org/gradle/api/internal/artifacts/repositories/resolver/ExternalResourceResolver.java中:

public static boolean disableExtraChecksums() {
    return Boolean.getBoolean("org.gradle.internal.publish.checksums.insecure");
}

private void publishChecksums(ExternalResourceName destination, File content) {
    publishChecksum(destination, content, "sha1", 40);

    if (!ExternalResourceResolver.disableExtraChecksums()) {
        publishPossiblyUnsupportedChecksum(destination, content, "sha-256", 64);
        publishPossiblyUnsupportedChecksum(destination, content, "sha-512", 128);
    }
}

所以解决方案是将系统属性 org.gradle.internal.publish.checksums.insecure设置为true:

  • gradle -D org.gradle.internal.publish.checksums.insecure=true ...
  • systemProp.org.gradle.internal.publish.checksums.insecure = truegradle.properties
  • System.setProperty("org.gradle.internal.publish.checksums.insecure", "true")settings.gradle

参见: