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

问题描述

我正在将一些my-libs.zip上传到S3,但是无法获取覆盖artifactId的语法。当前artifactId,它是从project.name

提取settings.gradle

注意:我不想在project.name中更改我的settings.gradle

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 pluginmaven-publish plugin。这两个插件的功能基本相同,但很久以前就不推荐使用第一个插件。您应该决定使用哪个插件,我建议使用maven-publish插件。


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

Maven元素: artifactId
默认值uploadTask.repositories.mavenDeployer.pom.artifactId(如果已设置)或archiveTask.archiveBaseName

后来:

archiveTask.archiveBaseName属性设置为默认值以外的其他值时,还必须将uploadTask.repositories.mavenDeployer.pom.artifactId设置为相同的值。否则,可能会从生成的POM中为同一版本中的其他项目使用错误的工件ID引用当前的项目。

此处,mavenDeployer是指已弃用的方法,该方法已添加到RepositoryHandler之后的repositories中。似乎需要使用这种不赞成使用的方法来指定目标存储库,而不是使用您使用的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部分则允许您以与artifactId和{ {1}}。