Gradle 覆盖 zip 存档的默认设置 'artifactId'

Gradle override default 'artifactId' of a zip archive

我正在将一些 my-libs.zip 上传到 S3,但无法获得覆盖默认 artifactId 的语法。当前 artifactId,它是从 settings.gradle

中拾取的 project.name

注意:我不想在settings.gradle

中更改我的project.name
apply plugin: 'maven-publish'

artifacts {
    someArtifact file: file('image/my-libs.zip'), name: 'my-libs', type: 'zip'
}

uploadSomeArtifact {
    description 'Uploads some artifact.'
    group = "com.mypackage"
    version = "dummy-SNAPSHOT"
    repositories {
        maven {
            url "s3://my-mvn-repo/snapshot/com/mypackage"
            authentication {
                awsIm(AwsImAuthentication)
            }
        }
    }
}

首先,出于某种原因,您同时应用了 maven plugin and the maven-publish plugin。这两个插件的功能基本相同,但第一个插件很久以前就被弃用了。您应该决定使用哪个插件,我建议使用 maven-publish 插件。


尽管如此,让我们看一下旧 maven 插件的文档。它说:

Maven Element: artifactId
Default value: uploadTask.repositories.mavenDeployer.pom.artifactId (if set) or archiveTask.archiveBaseName

以后:

When you set the archiveTask.archiveBaseName property to a value other than the default, you’ll also have to set uploadTask.repositories.mavenDeployer.pom.artifactId to the same value. Otherwise, the project at hand may be referenced with the wrong artifact ID from generated POMs for other projects in the same build.

这里,mavenDeployer 指的是被添加到 repositories 后面的 RepositoryHandler 的已弃用方法。似乎需要使用这种已弃用的方式来指定目标存储库,而不是使用您使用的 maven 方法。可悲的是,可能无法在这个旧界面上使用 AWS 身份验证和 s3 协议。


现在让我们来看看新的 maven-publish 插件。使用此插件,您不再定义工件和配置 Upload 任务。相反,您定义发布和存储库,插件将为发布和存储库的每个组合生成一个任务:

publishing {
    publications {
        myLibs(MavenPublication) {
            groupId = 'com.mypackage'
            artifactId = 'my-libs'
            version = 'dummy-SNAPSHOT'
            artifact (file('image/my-libs.zip')) {
                classifier 'src'
                extension 'zip'
            }
        }
    }
    repositories {
        maven {
            url 's3://my-mvn-repo/snapshot/com/mypackage'
            authentication {
                awsIm(AwsImAuthentication)
            }
        }
    }
}

如您所见,repositories 部分保持不变,publications 部分允许您以与 groupId 相同的方式定义 artifactIdversion.