#android #maven #gradle #artifactory #aar
#Android #maven #gradle #artifactory #aar
Вопрос:
У меня есть библиотека с 4 модулями (все они являются aar). Перед обновлением до новейшего gradle для каждого модуля мне нужно было запустить artifactoryPublish task. Прямо сейчас мне нужно очистить и перестроить проект перед запуском каждой задачи публикации.
> Task :module-1:generatePomFileForAarPublication
> Task :module-1:artifactoryPublish
> Task :extractModuleInfo
No publisher config found for project: android-integration-sdk-light
> Task :module-1:extractModuleInfo
> Task :module-2:extractModuleInfo
> Task :module-3:extractModuleInfo
> Task :module-4:extractModuleInfo
[pool-4-thread-1] Deploying artifact: https://xxx.yyy
[pool-4-thread-1] Deploying artifact: https://xxx.yyy
> Task :artifactoryDeploy
BUILD SUCCESSFUL in 6s
Запуск первой задачи
> Task :module-1:generatePomFileForAarPublication
> Task :module-1:artifactoryPublish
> Task :extractModuleInfo UP-TO-DATE
> Task :module-1:extractModuleInfo UP-TO-DATE
> Task :module-2:extractModuleInfo UP-TO-DATE
> Task :module-3:extractModuleInfo UP-TO-DATE
> Task :module-4:extractModuleInfo UP-TO-DATE
> Task :artifactoryDeploy
BUILD SUCCESSFUL in 2s
Запуск второй задачи
Config for artifactory:
apply plugin: 'com.jfrog.artifactory'
apply plugin: 'maven-publish'
apply from: "../artifactory/config.gradle"
publishing {
publications {
aar(MavenPublication) {
groupId project.groupId
version project.versionName
artifactId project.name
artifact("$buildDir/outputs/aar/${project.getName()}-release.${project.fileExtension}")
pom.withXml {
def node = asNode()
// ugly hack to set the packaging property in the POM as 'aar'
((NodeList) node.get('packaging')).get(0).value = project.fileExtension
def dependenciesNode = node.appendNode('dependencies')
def cl = { Dependency dep ->
if (dep.group == null || dep.name == null || dep.name == "unspecified") {
return // ignore invalid dependencies
}
def dependencyVersion
//Only a temporary hack - need more investigation
def dependencyGroup
if (dep.group == "mobile-library") {
dependencyGroup = groupId
} else {
dependencyGroup = dep.group
}
//"fix" for compile projects
if (dep.version == "unspecified" || dep.version == null) {
dependencyVersion = project.versionName
} else {
dependencyVersion = dep.version
}
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dependencyGroup)
dependencyNode.appendNode('artifactId', dep.name)
dependencyNode.appendNode('version', dependencyVersion)
if (!dep.transitive) {
// If this dependency is transitive, we should force exclude all its dependencies them from the POM
def exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion')
exclusionNode.appendNode('groupId', '*')
exclusionNode.appendNode('artifactId', '*')
} else if (!dep.properties.excludeRules.empty) {
// Otherwise add specified exclude rules
def exclusionsNode = dependencyNode.appendNode('exclusions')
dep.properties.excludeRules.each { ExcludeRule rule ->
def exclusion = exclusionsNode.appendNode('exclusion')
exclusion.appendNode('groupId', rule.group ?: '*')
exclusion.appendNode('artifactId', rule.module ?: '*')
}
}
}
// List all dependencies and write to POM
configurations.api.getAllDependencies().each cl
configurations.implementation.getAllDependencies().each cl
}
}
}
}
artifactory {
contextUrl = repositoryPath
publish {
repository {
repoKey = repositoryName
username = repositoryUserName
password = repositoryPassword
maven = true
}
defaults {
publications('aar')
publishArtifacts = true
// Publish generated POM files to Artifactory (true by default)
}
}
}
Использование файла в подмодулях, каждый модуль имеет свое собственное имя:
project.ext {
name = "module-1"
fileExtension = "aar"
}
apply plugin: 'com.android.library'
apply from: "../artifactory/release.gradle"
Должен ли я принудительно очищать задачу и перестраивать задачу перед каждой публикацией?
Или я должен попытаться иметь одну точку входа для каждого модуля в главном файле gradle?
Комментарии:
1. Какая у вас версия плагина Gradle Artifactory?
2. версия: 4.16.0
Ответ №1:
Эта проблема должна была быть решена в плагине Gradle Artifactory 4.18.0.
Вы можете найти более подробную информацию об этой проблеме здесь: https://github.com/jfrog/build-info/issues/383
Пожалуйста, обновите свой плагин Gradle Artifactory.
Комментарии:
1. Привет, спасибо за эту информацию. После обновления до 4.18.0 / 4.18.1 я не могу загрузить какую-либо библиотеку. Все задачи выполняются за 0 секунд. Так что обновление не помогло.
2. Не могли бы вы открыть вопрос с более подробной информацией? github.com/jfrog/build-info/issues/new/choose
3. Какую дополнительную информацию я должен добавить?
4. Отказ от ответственности — я разработчик экосистемы в JFrog. В выпуске GitHub, пожалуйста, предоставьте выходные данные для последней версии плагина Gradle Artifactory. Кроме того, если возможно, минимальный воспроизводимый пример не является обязательным, но это было бы здорово. Спасибо!