15/09/2025
Compartir tus creaciones es uno de los pilares fundamentales de la comunidad de desarrollo. Si has construido una librería Android útil y deseas que otros desarrolladores la utilicen fácilmente en sus proyectos, publicarla en Maven Central es el camino a seguir. Este repositorio es el estándar de facto para la distribución de librerías Java y Android, ofreciendo visibilidad y una gestión de dependencias simplificada para los consumidores.

En este artículo, desglosaremos el proceso, a menudo percibido como complejo, de subir tu librería a Maven Central, centrándonos en el ecosistema Android y las herramientas modernas de Gradle. Desde la configuración inicial de tu proyecto hasta la liberación final a través de Sonatype OSSRH, te guiaremos para que tu código sea accesible a la comunidad global.
- ¿Por Qué Publicar Tu Librería en Maven Central?
- Requisitos Previos Esenciales
- La Anatomía de una Dependencia: GAV (Group, Artifact, Version)
- Paso a Paso: Preparando Tu Librería Android para la Publicación
- Errores Comunes y Soluciones
- ¿Cómo Usar Tu Librería Publicada?
- Preguntas Frecuentes (FAQ)
- Conclusión
¿Por Qué Publicar Tu Librería en Maven Central?
Publicar tu librería en Maven Central no es solo una cuestión de prestigio; ofrece beneficios tangibles tanto para ti como desarrollador como para aquellos que usarán tu código. Aquí te detallamos las razones clave:
- Reusabilidad y Simplificación: Una vez publicada, tu librería puede ser incluida en cualquier proyecto Android (o Java) con una simple línea en su archivo
build.gradle. Esto elimina la necesidad de copiar archivos JAR/AAR manualmente o de configurar módulos locales. - Gestión de Dependencias: Maven Central, junto con herramientas como Gradle, maneja las dependencias transitivas. Si tu librería depende de otras, estas se descargarán automáticamente al añadir tu librería, simplificando enormemente la configuración del proyecto consumidor.
- Visibilidad Global: Millones de desarrolladores buscan librerías en Maven Central a diario. Publicar allí aumenta drásticamente la visibilidad de tu trabajo y te permite contribuir de manera significativa a la comunidad de código abierto.
- Versiones y Actualizaciones: Puedes publicar múltiples versiones de tu librería, permitiendo a los usuarios elegir la que mejor se adapte a sus necesidades y facilitando la distribución de actualizaciones y correcciones de errores.
- Profesionalismo: Tener una librería en Maven Central es un signo de profesionalismo y compromiso con la calidad del software.
Es importante mencionar que, aunque JCenter fue una alternativa popular para librerías Android, ha cesado de aceptar nuevas subidas desde 2021, consolidando a Maven Central como la opción principal para la distribución pública.
Requisitos Previos Esenciales
Antes de sumergirnos en el proceso de publicación, asegúrate de tener los siguientes elementos y conocimientos a mano:
- Java Development Kit (JDK): Necesitarás un JDK instalado y configurado correctamente en tu sistema para compilar tu librería.
- Gradle: La herramienta de construcción por excelencia en proyectos Android. Asegúrate de entender los conceptos básicos de Gradle y cómo funciona tu
build.gradle. - Control de Versiones (Git): Tu librería debe estar alojada en un repositorio de control de versiones público (GitHub, GitLab, Bitbucket, etc.). Esto es un requisito para Maven Central, ya que necesitan una URL SCM (Source Code Management).
- Cuenta en Sonatype OSSRH: Sonatype Open Source Software Repository Hosting (OSSRH) es la plataforma que actúa como puerta de entrada a Maven Central. Necesitarás una cuenta y un ticket JIRA para solicitar y configurar tu Group ID.
- Claves PGP (Pretty Good Privacy): Para garantizar la autenticidad de tu librería, Maven Central requiere que firmes digitalmente tus artefactos. Esto se hace con un par de claves PGP (pública y privada).
La Anatomía de una Dependencia: GAV (Group, Artifact, Version)
Cada librería en Maven Central se identifica de forma única mediante sus coordenadas GAV:
- Group ID (ID de Grupo): Identifica el grupo o la organización que publica la librería. Convencionalmente, se utiliza el nombre de dominio invertido (ej.,
com.example.mylibrary). Debe ser único y registrado en Sonatype. - Artifact ID (ID de Artefacto): Identifica el proyecto o módulo específico dentro del grupo. Por ejemplo, si tu librería es un módulo Android llamado
mycustomview, tu Artifact ID podría sermy-custom-view. - Version (Versión): La versión de tu librería (ej.,
1.0.0,1.0.1-SNAPSHOT). Las versionesSNAPSHOTson para desarrollo y no son estables, mientras que las versiones sin-SNAPSHOTse consideran estables y de lanzamiento.
Cuando alguien usa tu librería, la declara en su build.gradle de la siguiente manera:
implementation 'com.example.mylibrary:my-custom-view:1.0.0'Donde com.example.mylibrary es el Group ID, my-custom-view es el Artifact ID y 1.0.0 es la Version.
Paso a Paso: Preparando Tu Librería Android para la Publicación
Aquí te presentamos una guía detallada para configurar tu proyecto Android y publicarlo en Maven Central.
1. Configuración del Proyecto Android
Asumimos que ya tienes un proyecto Android con un módulo de librería (tipo com.android.library). Si no, puedes crearlo desde Android Studio.
Modifica el build.gradle del Módulo de Librería
Abre el archivo build.gradle de tu módulo de librería (no el del proyecto raíz) y comienza a añadir las configuraciones necesarias.
Primero, aplica los plugins esenciales:
plugins {
id 'com.android.library'
id 'maven-publish' // Para publicar artefactos
id 'signing' // Para firmar artefactos
}Luego, dentro del bloque android, asegúrate de que tu librería genere un AAR (Android Archive) y que la configuración de publicación sea correcta. Es crucial que la variante de compilación que deseas publicar sea release.
android {
namespace 'com.example.mylibrary' // Tu Group ID invertido
compileSdk 34
defaultConfig {
minSdk 21
// ... otras configuraciones
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
// Configuración para el plugin maven-publish
publishing {
singleVariant('release') {
withSourcesJar()
withJavadocJar()
}
}
}El bloque publishing dentro de android es importante para indicar qué variante de compilación (release en este caso) debe ser empaquetada e incluir los JARs de fuentes y Javadoc, que son requisitos de Maven Central.
2. Detalles del POM (Project Object Model)
El POM es un archivo XML que describe el proyecto y su configuración. Gradle lo generará automáticamente, pero necesitamos proporcionarle la información necesaria.
Añade el siguiente bloque publishing a tu build.gradle, fuera del bloque android:
publishing {
repositories {
// Para publicar localmente, útil para pruebas
maven {
name = 'mavenLocal'
url = uri(layout.buildDirectory.dir('repo'))
}
// Repositorio de Sonatype OSSRH (para Maven Central)
maven {
name = 'Sonatype'
url = uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/")
credentials {
username = System.getenv('OSSRH_USERNAME') ?: project.properties['ossrhUsername']
password = System.getenv('OSSRH_PASSWORD') ?: project.properties['ossrhPassword']
}
}
}
publications {
// Define tu publicación para el AAR de Android
androidLibrary(MavenPublication) {
groupId = 'com.example.mylibrary' // Tu Group ID
artifactId = 'my-custom-view' // Tu Artifact ID
version = '1.0.0' // La versión de tu librería
// Componente de Android para el AAR, fuentes y Javadoc
from components.release
// Detalles del POM (Project Object Model)
pom {
name = 'My Awesome Android Library'
description = 'A short description of my library.'
url = 'https://github.com/your-username/your-library-repo'
licenses {
license {
name = 'The Apache Software License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id = 'your-id'
name = 'Your Name'
email = '[email protected]'
}
}
scm {
connection = 'scm:git:github.com/your-username/your-library-repo.git'
developerConnection = 'scm:git:ssh://github.com/your-username/your-library-repo.git'
url = 'https://github.com/your-username/your-library-repo'
}
}
}
}
}Asegúrate de reemplazar los valores de ejemplo (com.example.mylibrary, my-custom-view, URLs, nombres, etc.) con los detalles reales de tu librería y tu persona. La información del POM es crucial para la validación en Maven Central.
Elementos Importantes del POM
| Elemento | Descripción | Obligatorio para Maven Central |
|---|---|---|
groupId | Identificador único del grupo/organización. | Sí |
artifactId | Identificador único del proyecto/módulo. | Sí |
version | Versión de la librería. | Sí |
name | Nombre legible de la librería. | Sí |
description | Breve descripción de la funcionalidad. | Sí |
url | URL del sitio web del proyecto o repositorio. | Sí |
licenses | Información de la licencia bajo la cual se distribuye la librería. | Sí |
developers | Información sobre los desarrolladores. | Sí |
scm | Información del sistema de control de versiones (URL del repositorio). | Sí |
3. Firma Digital con PGP
La firma digital es un requisito de seguridad para Maven Central. Asegura que los artefactos no han sido alterados y provienen del editor legítimo.
Generación de Claves PGP
Si no tienes un par de claves PGP, puedes generarlas usando GnuPG. Instala GnuPG si aún no lo tienes y luego ejecuta en tu terminal:
gpg --full-generate-keySigue las instrucciones, selecciona un tipo de clave (RSA y RSA), un tamaño de clave (4096 bits es recomendado), una fecha de expiración (sin expiración si lo deseas) y proporciona tu nombre, correo electrónico y una frase de contraseña (passphrase). Guarda esta frase de contraseña en un lugar seguro.
Para listar tus claves y obtener tu ID de clave (necesario para Gradle):
gpg --list-secret-keys --keyid-format LONGBusca la línea que comienza con sec y anota el ID de 16 caracteres (ej., 4F1F41F1F1F1F1F1).
Configuración del Plugin signing
En tu build.gradle (el mismo del módulo de librería), añade el bloque signing:
signing {
sign publishing.publications.androidLibrary
}Para que Gradle sepa qué clave usar y su frase de contraseña, debes configurar las propiedades en tu archivo gradle.properties (en la raíz de tu proyecto, no en el módulo de librería):
# gradle.properties
signing.gnupg.keyName=YOUR_KEY_ID_FROM_GPG
signing.gnupg.passphrase=YOUR_PGP_PASSPHRASE
# Credenciales de Sonatype OSSRH
ossrhUsername=YOUR_OSSRH_USERNAME
ossrhPassword=YOUR_OSSRH_PASSWORDImportante: Para mayor seguridad, especialmente en entornos CI/CD, es preferible usar variables de entorno para las contraseñas, como se indica en el bloque publishing del build.gradle (System.getenv('OSSRH_USERNAME')). Si usas gradle.properties, asegúrate de que este archivo no se suba a tu repositorio público (añádelo a .gitignore).
4. Configuración de Sonatype OSSRH (para Maven Central)
Sonatype OSSRH es el punto de partida para que tu librería llegue a Maven Central.
Registrarse y Solicitar un Group ID
- Ve a issues.sonatype.org y crea una cuenta JIRA.
- Crea un nuevo ticket de tipo 'New Project'.
- En la descripción, explica que deseas publicar una librería de código abierto en Maven Central.
- El campo más importante es 'Group ID'. Debe ser un dominio que controles (ej.,
com.yourdomainoio.github.yourusernamesi usas GitHub). Sonatype verificará la propiedad del dominio. - Una vez que tu ticket sea aprobado y tu Group ID configurado, recibirás las instrucciones para el siguiente paso.
Credenciales de Sonatype
Como se mostró en el paso 2, las credenciales de Sonatype se configuran en el bloque repositories de tu publishing. Asegúrate de que OSSRH_USERNAME y OSSRH_PASSWORD (o las propiedades en gradle.properties) contengan tus credenciales de Sonatype.
5. El Proceso de Publicación (Deploy)
Con todas las configuraciones en su lugar, ¡es hora de publicar!
Publicar Localmente (Opcional, para Pruebas)
Antes de subir a Sonatype, puedes probar la publicación localmente para asegurarte de que todo funciona. Esto creará los artefactos en una carpeta repo dentro de tu directorio build.
./gradlew publishToMavenLocalEsto generará los archivos AAR, JAR de fuentes, JAR de Javadoc y el POM firmado en tu repositorio local. Puedes verificar estos archivos para asegurarte de que todo está correcto.
Publicar a Sonatype OSSRH
Una vez que estés seguro de que tu configuración es correcta, ejecuta el siguiente comando para subir tu librería a Sonatype:
./gradlew publishAllPublicationsToSonatypeRepositoryEste comando compilará tu librería, generará los artefactos (AAR, fuentes, Javadoc, POM), los firmará con tu clave PGP y los subirá al repositorio de staging de Sonatype.
Si todo va bien, verás un mensaje de BUILD SUCCESSFUL.
Versiones Snapshot vs. Release
Durante el desarrollo, puedes usar versiones SNAPSHOT (ej., 1.0.0-SNAPSHOT). Estas versiones se publican en un repositorio de snapshots de Sonatype y no requieren el proceso de cierre y liberación en Nexus. Son ideales para pruebas internas o para compartir versiones pre-lanzamiento. Para una versión final, debes usar una versión de lanzamiento sin -SNAPSHOT.
6. Cierre y Liberación en Sonatype Nexus Repository Manager
Después de ejecutar el comando de publicación, tu librería estará en un 'repositorio de staging' en Sonatype Nexus. Este es un área temporal donde puedes verificar que todos los artefactos estén presentes y sean correctos antes de la liberación final a Maven Central.
- Accede a Sonatype Nexus Repository Manager en s01.oss.sonatype.org.
- Inicia sesión con tus credenciales de Sonatype.
- En el menú de la izquierda, selecciona 'Staging Repositories'.
- Busca tu repositorio de staging. Generalmente tendrá un nombre que incluye tu Group ID y una marca de tiempo (ej.,
comexamplemylibrary-1234). - Selecciona tu repositorio. En la parte inferior, verás los artefactos que has subido.
- Haz clic en el botón 'Close' (Cerrar). Esto valida que todos los requisitos de Maven Central se cumplen (artefactos presentes, firmas correctas, POM completo, etc.). Si hay errores, el cierre fallará y te mostrará el motivo. Deberás corregir los errores, borrar el repositorio de staging y volver a subir.
- Una vez que el repositorio se haya cerrado correctamente (el estado cambiará a 'Closed'), el botón 'Release' (Liberar) se habilitará. Haz clic en él.
- Confirma la liberación.
Después de la liberación, tu librería comenzará el proceso de sincronización con Maven Central. Este proceso puede tardar entre 10 minutos y varias horas (normalmente menos de 2 horas) hasta que tu librería sea visible y descargable desde Maven Central.
Errores Comunes y Soluciones
- Problemas de Firma: Asegúrate de que tu clave PGP sea válida, que la frase de contraseña sea correcta y que
signing.gnupg.keyNameysigning.gnupg.passphraseestén configurados correctamente. Verifica que el pluginsigningesté aplicado. - Credenciales Incorrectas: Revisa tus credenciales de Sonatype y asegúrate de que las variables de entorno o las propiedades en
gradle.propertiessean correctas. - Información del POM Incompleta: Los errores de cierre en Sonatype Nexus a menudo se deben a información faltante o incorrecta en el POM (licencias, desarrolladores, SCM, etc.). Revisa la tabla de elementos obligatorios.
- Group ID No Aprobado: Si tu Group ID no ha sido aprobado por Sonatype, no podrás publicar. Asegúrate de haber completado el proceso de solicitud de ticket JIRA.
- Artefactos Faltantes: Asegúrate de que
withSourcesJar()ywithJavadocJar()estén configurados en el bloquepublishingdentro deandroid.
¿Cómo Usar Tu Librería Publicada?
Una vez que tu librería esté en Maven Central, cualquier desarrollador puede usarla fácilmente. Simplemente necesitan añadirla como una dependencia en su archivo build.gradle (a nivel de módulo):
dependencies {
implementation 'com.example.mylibrary:my-custom-view:1.0.0'
}Y luego, pueden utilizar tu librería en su código, por ejemplo, en un layout XML si es una vista personalizada:
<com.example.mylibrary.MyCustomView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="This is my custom view from my little library." />Preguntas Frecuentes (FAQ)
¿Cuánto tarda en aparecer mi librería en Maven Central?
Una vez que liberas tu repositorio de staging en Sonatype Nexus, la sincronización con Maven Central suele tardar entre 10 minutos y 2 horas. En casos excepcionales, puede demorar hasta 24 horas.
¿Puedo publicar múltiples módulos de librería en un solo proyecto?
Sí, puedes configurar múltiples publicaciones en tu archivo build.gradle, una por cada módulo de librería que desees publicar. Cada módulo tendrá su propio artifactId pero puede compartir el mismo groupId.
¿Qué es un archivo AAR/JAR y cuál debo usar?
Un archivo JAR (Java Archive) contiene clases compiladas de Java y recursos. Un archivo AAR (Android Archive) es un formato de archivo específico de Android que contiene código compilado, recursos Android (layouts, draws, etc.) y un manifiesto Android. Para librerías Android, siempre debes publicar un archivo AAR.
¿Necesito un sitio web para mi librería?
No es estrictamente necesario tener un sitio web dedicado, pero sí es un requisito para Maven Central proporcionar una URL para tu proyecto en la sección pom.url. Esta puede ser la URL de tu repositorio de GitHub, GitLab o Bitbucket.
¿Puedo usar GitHub Packages o GitLab Package Registry en su lugar?
Sí, GitHub Packages y GitLab Package Registry son alternativas excelentes para alojar librerías Maven (y de otros tipos). Son particularmente útiles para librerías privadas o para proyectos de código abierto que no necesitan la visibilidad global de Maven Central. Sin embargo, si tu objetivo es la máxima exposición y facilidad de uso para la comunidad de código abierto, Maven Central sigue siendo el estándar de oro.
Conclusión
Publicar tu librería Android en Maven Central es un paso significativo para cualquier desarrollador que desee compartir su trabajo y contribuir a la comunidad. Aunque el proceso puede parecer intimidante al principio debido a los múltiples pasos y requisitos, siguiendo esta guía detallada, habrás configurado tu proyecto, firmado tus artefactos y liberado tu creación para que millones de desarrolladores la utilicen. ¡Ahora tu pequeña librería puede tener un gran impacto en el mundo del desarrollo Android!
Si quieres conocer otros artículos parecidos a Publica Tu Librería Android en Maven Central puedes visitar la categoría Librerías.
