Cómo utilizar artifactoryPublish para publicar artefactos de liberación y depuración
Tengo proyectos de Android Studio que construyen AARs o APKs en versiones de lanzamiento y depuración. Me gustaría publicar estos en diferentes repositorios en mi servidor Artifactory. Los ejemplos de JFrog no parecen cubrir este caso.
¿Significa esto que se considera la mejor práctica simplemente construir sólo la versión o sólo la versión de depuración y elegir qué y dónde cargar en función del tipo de compilación?
- ¿Debo usar Maven para una aplicación para Android?
- Construye una biblioteca de código cerrado de Android basada en Gradle
- Error de ejecución de la tarea ': bintrayUpload'.
- No obtener fuentes procesadas (generadas) de anotación compiladas en apk, usando maven
- ¿Qué está haciendo Eclipse cuando dice que está actualizando índices?
- No puedo encontrar la dependencia de maven para que las API de Google usen mapas
- Pasa parámetro de perfil MAVEN de jenkins
- Adición de la biblioteca de soporte al proyecto de estudio de Android
- Android + Maven "No se encontró ningún identificador de recurso para el atributo 'installLocation' en el paquete 'android'"
- Gradle: sólo resolver las dependencias para la variante deseada
- ¿Cómo conoce Android Studio sobre las nuevas versiones de dependencia?
- Crosswalk error en android construir en Córdoba proyecto
- Cómo saber groupid y artifactid de cualquier jars externos en el proyecto maven android
He configurado mi biblioteca android archivo build.gradle que el archivo aar compilado podría ser cargado en repos diferentes, dependiendo del tipo de construcción.
Por ejemplo, desea publicar artifatos de depuración en el repositorio 'libs-debug-local' y liberar artefactos en el repositorio 'libs-release-local'.
//First you should configure all artifacts you want to publish publishing { publications { //Iterate all build types to make specific //artifact for every build type android.buildTypes.all { variant -> //it will create different //publications ('debugAar' and 'releaseAar') "${variant.name}Aar"(MavenPublication) { def manifestParser = new com.android.builder.core.DefaultManifestParser() //Set values from Android manifest file groupId manifestParser.getPackage(android.sourceSets.main.manifest.srcFile) version = manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile) artifactId project.getName() // Tell maven to prepare the generated "*.aar" file for publishing artifact("$buildDir/outputs/aar/${project.getName()}-${variant.name}.aar") } } } } //After configuring publications you should //create tasks to set correct repo key android.buildTypes.all { variant -> //same publication name as we created above def publicationName = "${variant.name}Aar" //new task name def taskName = "${variant.name}Publication" //in execution time setting publications and repo key, dependent on build type tasks."$taskName" << { artifactoryPublish { doFirst { publications(publicationName) clientConfig.publisher.repoKey = "libs-${variant.name}-local" } } } //make tasks assembleDebug and assembleRelease dependent on our new tasks //it helps to set corrent values for every task tasks."assemble${variant.name.capitalize()}".dependsOn(tasks."$taskName") } //Inside artifactory block just set url and credential, without setting repo key and publications artifactory { contextUrl = 'http://artifactory.cooperok.com:8081/artifactory' publish { repository { username = "username" password = "password" } defaults { publishArtifacts = true // Properties to be attached to the published artifacts. properties = ['qa.level': 'basic', 'dev.team': 'core'] } } }
Eso es todo. Ahora si ejecuta el comando
gradle assembleRelaese artifactoryPublish
Aar se cargará en el repositorio 'libs-release-local'.
Y si usted corrió
gradle assembleDebug artifactoryPublish
Se cargará en el repositorio 'libs-debug-local'
Un menos de esta configuración es que siempre debe ejecutar artifactoryPublish tarea con assembleDebug / Release tareas
Para instantáneas + versiones de lanzamiento, puede utilizar sonatype (también conocido como mavencentral). Hice una breve guía pareja de semanas atrás, que puede encontrar de algún uso. Cómo publicar AARs de Android – instantáneas / lanzamiento a Mavencentral
No se puede publicar trabajo con respuesta @cooperok de lo contrario me ayude mucho.
Aquí está mi código:
apply plugin: 'com.android.library' apply plugin: 'com.jfrog.artifactory' apply plugin: 'maven-publish' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { minSdkVersion 9 targetSdkVersion 23 versionCode 1 versionName "0.0.1" } publishNonDefault true buildTypes { debug { minifyEnabled false debuggable true } release { minifyEnabled false debuggable false } snapshot { minifyEnabled false debuggable false } } } task androidJavadocs(type: Javadoc) { source = android.sourceSets.main.java.srcDirs classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) } task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { classifier = 'javadoc' from androidJavadocs.destinationDir } task androidSourcesJar(type: Jar) { classifier = 'sources' from android.sourceSets.main.java.srcDirs } artifacts { archives androidSourcesJar archives androidJavadocsJar } publishing { publications { android.buildTypes.all { variant -> "${variant.name}"(MavenPublication) { def manifestParser = new com.android.builder.core.DefaultManifestParser() groupId manifestParser.getPackage(android.sourceSets.main.manifest.srcFile) if("${variant.name}".equalsIgnoreCase("release")){ version = manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile) }else if ("${variant.name}".equalsIgnoreCase("debug")){ version = manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile).concat("-${variant.name}".toUpperCase().concat("-SNAPSHOT")) }else{ version = manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile).concat("-${variant.name}".toUpperCase()) } artifactId project.getName() artifact("$buildDir/outputs/aar/${project.getName()}-${variant.name}.aar") artifact androidJavadocsJar pom.withXml { def dependencies = asNode().appendNode('dependencies') configurations.getByName("_releaseCompile").getResolvedConfiguration().getFirstLevelModuleDependencies().each { def dependency = dependencies.appendNode('dependency') dependency.appendNode('groupId', it.moduleGroup) dependency.appendNode('artifactId', it.moduleName) dependency.appendNode('version', it.moduleVersion) } } } } } } android.buildTypes.all { variant -> model { tasks."generatePomFileFor${variant.name.capitalize()}Publication" { destination = file("$buildDir/publications/${variant.name}/generated-pom.xml") } } def publicationName = "${variant.name}" def taskName = "${variant.name}Publication" task "$taskName"() << { artifactoryPublish { doFirst { tasks."generatePomFileFor${variant.name.capitalize()}Publication".execute() publications(publicationName) clientConfig.publisher.repoKey = "${variant.name}".equalsIgnoreCase("release") ? "libs-release-local" : "libs-snapshot-local" } } } tasks."assemble${variant.name.capitalize()}".dependsOn(tasks."$taskName") } artifactory { contextUrl = 'http://172.16.32.220:8081/artifactory' publish { repository { username = "admin" password = "password" } defaults { publishPom = true publishArtifacts = true properties = ['qa.level': 'basic', 'dev.team': 'core'] } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' }
prueba esto:-
def runTasks = gradle.startParameter.taskNames artifactory { contextUrl = "${artifactory_contextUrl}" publish { repository { if ('assembleRelease' in runTasks) repoKey = "${artifactory_repository_release}" else if ('assembleDebug' in runTasks) repoKey = "${artifactory_repository_debug}" username = "${artifactory_user}" password = "${artifactory_password}" maven = true } defaults { publishArtifacts = true if ('assembleRelease' in runTasks) publications("${artifactory_publication_release}") else if ('assembleDebug' in runTasks) publications("${artifactory_publication_debug}") publishPom = true publishIvy = false } } }
Donde artifactory_repository_release = libs-release-local y artifactory_repository_debug = libs-debug-local
Artifactory repo en el que desea publicar su biblioteca arr.