可以发布到 mavenLocal 但不能发布到远程仓库吗?

问题描述

$ ./gradlew -version

------------------------------------------------------------
Gradle 6.5
------------------------------------------------------------

Build time:   2020-06-02 20:46:21 UTC
Revision:     a27f41e4ae5e8a41ab9b19f8dd6d86d7b384dad4

Kotlin:       1.3.72
Groovy:       2.5.11
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          1.8.0_181 (Oracle Corporation 25.181-b13)
OS:           Mac OS X 10.15.7 x86_64

我有一个包含以下 build.gradle 文件的子项目

plugins {
    id 'java'
    id 'maven-publish'
}

dependencies {
    compileOnly group: 'org.projectlombok',name: 'lombok',version: '1.18.10'
    annotationProcessor group: 'org.projectlombok',version: '1.18.10'

    compile group: 'javax.validation',name: 'validation-api',version: '2.0.1.Final'
}

task sourcesJar(type: Jar,dependsOn: classes){
    from sourceSets.main.allSource
}

artifacts{
    archives sourcesJar
}

publishing {
    repositories{
        maven {
            url 's3://' + s3_bucket
            authentication {
                awsIm(AwsImAuthentication)
            }
        }
    }
    publications {
        integrationsCommon(MavenPublication){
            artifactId artifactId
            from components.java
            artifact sourcesJar{
                classifier "sources"
            }
        }
    }
}

我能跑

$ ./gradlew clean build pTML -p my-sub-project

...并查看发布在我的 ~/.m2 本地存储库中的工件。

但是当我运行 publish 任务时出现以下错误

$ ./gradlew clean build publish -p my-sub-project
* What went wrong:
Execution Failed for task ':my-sub-project:publishIntegrationsCommonPublicationToMaven2Repository'.
> Failed to publish publication 'integrationsCommon' to repository 'maven2'
   > java.lang.NullPointerException (no error message)

这是为什么?我的印象是,如果可以发布到 Maven 本地,我可以在任何地方发布! (天啊,我想念 Maven!)。

解决方法

AWS documentation 建议定义 credentials

这只是指 CodeArtifact 而不是 S3,后者似乎是常见的后端。如果您想改用 S3...在命令中添加 --stacktrace,以确定 NullPointerException 可能是由什么引起的;配置可能缺少一些必要的东西。

这将是 S3 的 Gradle 文档:AWS S3 repositories configuration