Gradle uploadArchives пространство имен артефактов при зависимости от плагина
У меня есть приложение для Android с Gradle. Я использую плагин gradle-release для создания автоматических выпусков, а затем задачу uploadArchives из Gradle для загрузки сгенерированного.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)
Чтобы добиться этого, у меня есть задача updateVersion плагина gradle-release в зависимости от uploadArchives.
updateVersion.dependsOn uploadArchives
Хорошо, когда я делаю это, artifacts.archives. пусто, поэтому нет загрузки.
Я подозреваю, что, возможно, поскольку я добавляю задачу uploadArchives в качестве зависимости задачи плагина релиза, "пространство имен" отличается, поэтому в основном задача uploadArchives не использует "тот же экземпляр" artifacts.archives, заполненный во время сборка.
1 ответ
updateVersion.dependsOn uploadArchives
Если вы сделаете это, то вы в конечном итоге uploadArchives
в том же процессе, что и выпуск, но не в том же процессе, что и сборка. Чтобы получить правильную версию для самой задачи сборки, плагин выпуска запускает новую сборку Gradle, которая запускает сборку с правильным номером версии. (Это сделано потому, что многие другие плагины, такие как maven-publish, не могут использовать измененную версию проекта во время выполнения)
Если вы хотите выполнять задачи в том же процессе, что и сборка, вам нужно либо использовать задачи beforeReleaseBuild
или же 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)