Gradle uploadArchives工件命名空间(取决于插件时)

Gradle uploadArchives工件命名空间(取决于插件时),gradle,upload,android-gradle-plugin,gradle-plugin,gradle-release-plugin,Gradle,Upload,Android Gradle Plugin,Gradle Plugin,Gradle Release Plugin,我用Gradle开发了一个Android应用程序。我正在使用插件创建自动版本,然后使用Gradle的uploadArchives任务将生成的.apk上传到Maven repo(Nexus) 我必须添加档案以便在运行时动态上传,因为我的构建使用的是定制的Android风格。 当我从命令行运行uploadArchives时,一切正常: variant.outputs.each { output -> def apkFile = output.outputFile tasks.

我用Gradle开发了一个Android应用程序。我正在使用插件创建自动版本,然后使用Gradle的uploadArchives任务将生成的.apk上传到Maven repo(Nexus)

我必须添加档案以便在运行时动态上传,因为我的构建使用的是定制的Android风格。 当我从命令行运行uploadArchives时,一切正常:

variant.outputs.each { output ->
    def apkFile = output.outputFile

    tasks."assemble${capitalizedVariantName}" << {
        artifacts.archives [file: apkFile, classifier: variant.baseName]
    }
}

uploadArchives {
    repositories {
        mavenDeployer {
            pom.groupId = PROJECT_GROUP
            pom.artifactId = PROJECT_NAME
        }
    }
}
并且.apk已正确上载到Nexus

在发布插件自动更改项目的版本名并提交之前,我需要运行uploadArchives任务。 基本上:

- current version: 0.1.0-SNAPSHOT
- run release
- version becomes: 0.1.0
- build (build task)
- upload this build to Nexus (uploadArchives task)
- update the version to: 0.1.1-SNAPSHOT (updateVersion task)
为了实现这一点,我所做的是让gradle发布插件的updateVersion任务取决于上传的归档文件

updateVersion.dependsOn uploadArchives
好吧,当我这么做的时候,文物,档案。是空的,因此没有上传

我怀疑,可能是因为我添加了uploadArchives任务作为发布插件任务的依赖项,所以“名称空间”是不同的,所以uploadArchives任务基本上不使用构建期间填充的artifacts.archives的“相同实例”

updateVersion.dependsOn上载存档

updateVersion.dependsOn uploadArchives
如果您这样做,那么您将在发布完成时的同一过程中调用
uploadArchives
,而不是在构建完成时的同一过程中调用。为了获得适合构建任务本身的版本,发布插件生成一个新的gradle构建,该构建使用正确的版本号运行构建。(之所以这样做,是因为许多其他插件(如maven publish)无法在运行时获取已更改的项目版本)

如果要在与生成相同的过程中执行任务,则需要使用要依赖的任务
发布前生成
发布后生成
。它们都在同一进程中运行

所以在你的情况下是这样的

afterReleaseBuild.dependsOn uploadArchives
这将在版本生成完成后直接运行上载存档

为了更好地理解,我修改了您的taskgraph:

- current version: 0.1.0-SNAPSHOT
- run release
- version becomes: 0.1.0 (and is written to gradle.properties)
- spawn new gradle build
    - build (build task)
    - upload this build to Nexus (uploadArchives task)
- update the version to: 0.1.1-SNAPSHOT (updateVersion task)