首页 > 解决方案 > Gradle 覆盖 zip 存档的默认“artifactId”

问题描述

我正在将一些上传my-libs.zip到 S3 并且无法获得覆盖 default 的语法artifactId。目前artifactId,它是project.namesettings.gradle

注意:我不想改变我project.namesettings.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)
            }
        }
    }
}

标签: javagradlebuildbuild.gradlegradle-plugin

解决方案


首先,由于某种原因,您同时应用了mavenpluginmaven-publishplugin。两个插件的功能基本相同,但第一个插件很久以前就被弃用了。您应该决定使用哪个插件,我建议使用该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您使用的方法。遗憾的是,可能无法s3通过这个旧接口使用 AWS 身份验证和协议。


现在让我们看一下新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相同的方式定义。groupIdversion


推荐阅读