¿Cómo publicar una biblioteca de Android como un artefacto Maven en Bitbucket?

Estoy intentando publicar una biblioteca de Android como un artefacto de Maven en un repositorio de Bitbucket, a partir de este artículo que estaba vinculado en un número de boletín semanal de Android hace algún tiempo. El artículo describe cómo realizar la publicación y cómo vincular el artefacto publicado de otro proyecto de Android. Sin embargo, ni siquiera he conseguido hacer que la parte de publicación funcione correctamente.

Actualmente, este es el contenido relevante del archivo build.gradle perteneciente al proyecto de la biblioteca:

 apply plugin: 'maven' allprojects { repositories { jcenter() maven { url "https://raw.github.com/synergian/wagon-git/releases" } } } configurations { deployerJar } dependencies { deployerJar 'ar.com.synergian:wagon-git:0.2.5' } 

Las partes relevantes del archivo build.gradle del módulo de biblioteca en el proyecto son las siguientes:

 apply plugin: 'maven' uploadArchives { configuration = rootProject.configurations.archives repositories { configuration = rootProject.configurations.deployerJar mavenDeployer { pom.groupId = 'com.example' pom.artifactId = 'example-library' pom.version = '1.0.0' repository(url: "${bitbucketUrl}") { authentication(userName: bitbucketUsername, password: bitbucketPassword) } } } } 

Donde bitbucketUrl , bitbucketUsername y bitbucketPassword se incluyen en el archivo gradle.properties en la raíz del proyecto.

¿Entonces, cuál es el problema? Cuando ejecuto la tarea uploadArchives de Android Studio, Gradle muestra que la operación se ha realizado correctamente. Pero nada aparece en el repositorio Bitbucket.

Nada se escribe también sobre la estructura de ese repositorio, excepto en el sitio web de Wagon Git (llamándolo documentación me parece un poco un tramo) donde, dada la URL del repositorio del formulario

 git:releases://git@github.com:synergian/wagon-git.git 

Se dice que las releases representan una rama del repositorio. He obligado a esa parte sobre la estructura, incluso trató de añadir un directorio de repository (para imitar el repositorio Maven local en mi máquina), pero sin suerte, y, sobre todo, ninguna pista.

Un problema aún más grave es que, mientras estaba experimentando con diferentes configuraciones, me di cuenta de que tenía la URL del repositorio mal; Sin embargo, nunca, nunca, durante la ejecución, Gradle notó el error, y me advirtió o me informó con un mensaje adecuado. Esto me llevó a sospechar que ni siquiera estaba preparando el artefacto para cargar, ni tratando de conectarse a Bitbucket, pero no pude encontrar ningún puntero para entender por qué.

Por último, una cosa aún más extraña sucede: cuando comento la línea:

 configuration = rootProject.configurations.deployerJar 

En el archivo build.gradle del módulo y ejecuto la tarea uploadArchives , Gradle se detiene con un error diciendo que es incapaz de encontrar un vagón adecuado para administrar el protocolo git, que se espera; Sin embargo, en el proceso, el artefacto de Maven aparece en el repositorio local en mi máquina. Por lo tanto, al bloquear el proceso de publicación, al menos puedo trabajar localmente con mi biblioteca desde otros proyectos dependiendo de ello, a través de la gestión de Gradle de dependencias de tipo Maven.

¿Qué estoy haciendo mal?

  1. No funciona en silencio, encienda --info . Probablemente el mayor obstáculo en la depuración del problema. Por alguna razón, la gente que escribió el despliegue de wagon-git decidió escribir mensajes de error en el nivel de información. Así gradle falla en silencio sin mostrarle ningún mensaje de error. Este es uno de los mensajes que recibí con --info activado:

     [INFO] [git] fatal: 'git@bitbucket.org/foragerr/mvn-deploy-test.git' does not appear to be a git repository 

Esto es aparentemente un error fatal, pero en lo que se refiere a gradle, todo está bien y dandy. ¡Una vez que comience a leer estos mensajes de error, podemos hacer un progreso real!

  1. Git url: El git URL como se describe aquí , comienza con git: El despliegue wagon-git se activa cuando la url comienza con git: Es posible usar un https: url, pero el plugin de maven utilizará un despliegue interno en lugar de un wagon-git. Para utilizar explícitamente wagon-git, la url tiene que empezar con git:

     repository(url: "git:releases://git@bitbucket.org:foragerr/mvn-bitbucket-deploy-test.git") 

dónde
releases es rama
foragerr es bitbucket nombre de usuario
mvn-bitbucket-deploy-test es repo de bitbucket

  1. Autentificación: wagon-git utiliza SSH para conectarse a bitbucket. Es necesario configurar tanto git en el extremo local y repo bitbucket en el extremo remoto para utilizar SSH.

    • Configuración de SSH para git (recomiendo no usar un código de acceso, menos seguro, pero conveniente para despliegues automatizados)
  2. ¡Todo listo! Despliegue a su repo de gradle uploadArchives usando gradle uploadArchives . Vea el repo del ejemplo aquí .

Muestra build.gradle:

  group 'net.foragerr.test' version '1.2-SNAPSHOT' apply plugin: 'java' apply plugin: 'maven' sourceCompatibility = 1.5 repositories { mavenCentral() maven { url "https://raw.github.com/synergian/wagon-git/releases" } } configurations { deployerJar } dependencies { testCompile group: 'junit', name: 'junit', version: '4.11' deployerJar "ar.com.synergian:wagon-git:0.2.3" } uploadArchives { repositories.mavenDeployer { configuration = configurations.deployerJar; repository(url: "git:releases://git@bitbucket.org:foragerr/mvn-bitbucket-deploy-test.git") } } 
  • Esta dependencia me da dos versiones de un frasco. ¿Cómo puedo solucionar esto?
  • Crear Apklib para construir con maven
  • Dependencias transicionales de AAR en Maven
  • Excluir .jar de compilar en Android Studio con Gradle
  • ¿Cómo configurar la dependencia de Maven para Guice 3.0 para uso sin AOP?
  • Publicar un archivo aar en Maven Central con Gradle no trabajando
  • Android protobuf nano uso
  • Cómo añadir dependencia a Android Studio
  • play-services-base versus -basement dependances (AAR) en Android
  • Adición de la biblioteca de soporte al proyecto de estudio de Android
  • Error de Gradle "Atributo" xxx "ya se ha definido" en Android Studio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.