Использование плагина публикации Maven для проекта Android в Gradle 5
Я пытаюсь создать скрипт для публикации артефактов APK в Nexus с помощью плагина "maven-publish". В Gradle 4 можно было иметь такую конфигурацию (это работает):
apply plugin: 'maven-publish'
publishing {
repositories {
maven {
url "https://$MY_NEXUS_SERVER$/repository/${project.version.endsWith('-SNAPSHOT') ? 'snapshots' : 'releases'}"
credentials {
username mavenUser
password mavenPassword
}
}
publications {
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
if (variant.name == "release") {
create("apk${variant.name.capitalize()}", MavenPublication) {
groupId project.group
artifactId project.name
version project.version
artifact(output.outputFile)
}
}
}
}
}
}
}
В Gradle 5 это больше невозможно
При попытке построить проект я получаю эту ошибку:
Cannot create a Publication named 'android' because this container does not support creating elements by name alone. Please specify which subtype of Publication to create. Known subtypes are: MavenPublication
Как я могу переписать этот код для совместимости с Gradle 5?
1 ответ
Решение
Я нашел что-то, что работает (эквивалентно моему примеру кода выше):
apply plugin: 'maven-publish'
publishing {
repositories {
maven {
url "https://$MY_NEXUS_SERVER$/repository/${project.version.endsWith('-SNAPSHOT') ? 'snapshots' : 'releases'}"
credentials {
username mavenUser
password mavenPassword
}
}
publications {
create("apkRELEASE", MavenPublication) {
afterEvaluate {
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
if (variant.name == "release") {
groupId project.group
artifactId project.name
version project.version
artifact(output.outputFile)
}
}
}
}
}
}
}
}
Другой вариант построения произвольных вариантов (проверено на Gradle 5.5.1 / Android Gradle 3.5.0):
apply plugin: 'maven-publish'
publishing {
repositories {
maven {
url "https://$MY_NEXUS_SERVER$/repository/${project.version.endsWith('-SNAPSHOT') ? 'snapshots' : 'releases'}"
credentials {
username mavenUser
password mavenPassword
}
}
publications {
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
"maven${variant.name.capitalize()}Apk"(MavenPublication) {
groupId project.group
artifactId project.name
version project.version
artifact(output.outputFile)
}
}
}
}
}
}
Пример итоговой задачи публикации при сборке с вариантом отладки: publishMavenDebugApkPublicationToMavenRepository