Я только что обновил свой Gradle до 5.x и у меня появляется новая ошибка при попытке синхронизировать мой библиотечный проект. Эта ошибка исходит от издательского блока, который мне нужен, чтобы опубликовать мою библиотеку в maven local.
Вот что я делал с Gradle 4, и он работал просто отлично:
apply plugin: 'maven-publish'
publishing {
publications {
library(MavenPublication) {
groupId = 'myGroupId'
artifactId = 'myArtifactId'
version = android.defaultConfig.versionName
artifact bundleDebugAar
}
}
}
В Gradle 5 у меня теперь есть ошибка об артефакте при синхронизации проекта gradle:
ОШИБКА: не удалось получить неизвестное свойство bundleDebugAar для объекта типа org.gradle.api.publish.maven.internal.publication.DefaultMavenPublication.
Когда я удаляю строку артефакта, я могу синхронизировать проект, но когда я пытаюсь опубликовать ToMavenLocal, моя сборка не выполняется:
Не удалось выполнить задачу ": mypackage: generatePomFileForLibraryPublication".
Не указано значение для этого провайдера.
Я посмотрел руководство по обновлению Gradle, но не знаю, как решить мою проблему: https://docs.gradle.org/5.0/userguide/upgrading_version_4.html#rel5.0:pom_compile_runtime_separation
Кто-нибудь может сказать мне, что изменилось в этой новой версии, которую я не вижу, пожалуйста? Благодарю.
С Gradle 4. 8+ вы должны заключить блок publishing{}
в project.afterEvaluate
project.afterEvaluate {
publishing {
publications {
aar(MavenPublication) {
//...
artifact bundleReleaseAar
}
}
}
}
Вы можете найти официальный документ здесь:
До Gradle 4.8 блок публикации {} неявно обрабатывался так, как будто вся логика внутри него выполнялась после оценки проекта. Это сбивало с толку, потому что это был единственный блок, который вел себя таким образом. В рамках усилий по стабилизации в Gradle 4.8 мы осуждаем это поведение и просим всех пользователей перенести свою сборку.
Вы можете попробовать это.
project.afterEvaluate {
publishing {
publications {
library(MavenPublication) {
groupId = 'myGroupId'
artifactId = 'myArtifactId'
version = android.defaultConfig.versionName
artifact bundleDebugAar
}
}
}
}
Поместите это в project.afterEvaluate:
project.afterEvaluate {
publishing {
publications {
mavenDebugAAR(MavenPublication) {
artifact bundleDebugAar
}
}
}
}
Попробуй это.
Отключает только модули R8 для библиотеки Android.
android.enableR8.libraries = false
Отключает R8 для всех модулей.
android.enableR8 = false