根据插件

时间:2015-07-24 15:46:16

标签: gradle upload android-gradle gradle-plugin gradle-release-plugin

我有一个使用Gradle的Android应用程序构建。我使用gradle-release插件创建自动发布,然后使用Gradle上传的uploadArchives任务将生成的.apk上传到Maven仓库(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
        }
    }
}

然后我跑:

./gradlew assembleFlavorNameRelease uploadArchives

.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)

为实现这一目标,我所做的是根据uploadArchives

获取gradle-release插件的updateVersion任务
updateVersion.dependsOn uploadArchives

好吧,当我这样做时,artifacts.archives。是空的,所以没有上传。

我怀疑,也许,因为我将uploadArchives任务添加为发布插件任务的依赖项,然后是&#34;命名空间&#34;是不同的,所以基本上uploadArchives任务不使用&#34;相同的实例&#34; artifacts.archives的内容,在构建期间填充。

1 个答案:

答案 0 :(得分:1)

  

updateVersion.dependsOn uploadArchives

如果你这样做,那么你最终会在发布完成的同一过程中调用uploadArchives,但不会在构建完成的同一过程中调用beforeReleaseBuild。为了使构建任务本身的版本正确,发布插件生成一个新的gradle构建,它使用正确的版本号运行构建。 (这样做是因为许多其他插件如maven-publish在运行时无法在已更改的项目版本上拾取)

如果您想在与构建相同的过程中执行任务,则需要使用afterReleaseBuildafterReleaseBuild.dependsOn uploadArchives 依赖的任务。它们都在同一个过程中运行。

所以在你的情况下,它将是

uploadArchives

在构建完成发布版本后,它会直接运行- 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)

为了更好地理解,我调整了你的任务图:

TextView