我有一个使用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的内容,在构建期间填充。
答案 0 :(得分:1)
updateVersion.dependsOn uploadArchives
如果你这样做,那么你最终会在发布完成的同一过程中调用uploadArchives
,但不会在构建完成的同一过程中调用beforeReleaseBuild
。为了使构建任务本身的版本正确,发布插件生成一个新的gradle构建,它使用正确的版本号运行构建。 (这样做是因为许多其他插件如maven-publish在运行时无法在已更改的项目版本上拾取)
如果您想在与构建相同的过程中执行任务,则需要使用afterReleaseBuild
或afterReleaseBuild.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