Una vez publicado nuestro código fuente en un repositorio de acceso público como puede ser github, gitlab, bitbucket, sourceforge, gitkraken, apache allura, etc… Nos quedaría dar un paso importante, para facilitar su uso por otros. Esto es que sea sencillo la reutilización de nuestro código en los proyectos de terceros.
Con este objetivo, irremediablemente hay que plantearse que nuestros artefactos (librerías, jar en Java/kotlin) se puedan localizar en el (Central Repository) REPOSITORIO CENTRAL de MAVEN[1], donde cualquier programador puede acceder a la configuración de nuestro artefacto en diversos formatos (Gradle en sus variantes, Maven, etc…) para incorporarlo en sus proyectos de forma robusta frente a las dependencias
Aclarado ya la importancia que supone publicar en el REPOSITORIO CENTRAL DE MAVEN vamos a ver ahora cómo hacerlo desde el entorno Windows con el IDE de Intellij IDEA[2] y un repositorio en github, que es, el que he podido probar. Se resume en tres fases:
Fase de AUTORIZACIÓN
Hay que crear una cuenta[3] en Jira[4] de Sonatype[5], después de esto hay que abrir un ticket solicitando un nuevo id de grupo, indicando una estructura de paquetes; en mi caso he optado por “io.github.lcriadof”. Además, tendremos que especificar la URL del repositorio donde tenemos el proyecto
En respuesta al ticket, desde Jira, te pedirán una prueba de que el repositorio es tuyo, en mi experiencia tuve que crear un repositorio concreto desde mi cuenta github. Situación que comprobaron enseguida.
Superado esto, ya tenemos autorización para publicar en el REPOSITORIO CENTRAL DE MAVEN.
Fase de PREPARACIÓN[6]
Paso 1: Creación de claves, mediante una herramienta gpg[7].
Si usa Windows, utilice Gpg4win[8] con Kleopatra. Gpg4win incorpora varias herramientas integradas (GnuPG 2.3.4, Kleopatra 3.1.20, etc…)
Kleopatra (disponible para Windows y Linux) es un administrador de certificados y una GUI para GnuPG. El software almacena sus certificados y claves OpenPGP.
Al crear el par de claves, le pedirá un email, esto es algo muy importante pues su conjunto de claves pública/privada estará asociado a ese email. Además, ese email tendrás que incluirlo en un fichero de configuración xml en su proyecto de código libre (que explicamos más adelante) que servirá para que el comando maven de publicación (mvn clean deploy) compruebe su clave.
Paso 2: Modificación del fichero pom.xml.
Es necesario incorporar varias fragmentos de código xml para cumplir con los requisitos[9] de publicación en el REPOSITORIO CENTRAL DE MAVEN
2.1- Coordenadas del proyecto (GAV): Determina la localización de su proyecto en el repositorio central de maven, como en este ejemplo recogido del documento oficial al que hago referencia más arriba
https://central.sonatype.org/publish/requirements/#correct-coordinates
2.2- Nombre del proyecto, descripción y URL
https://central.sonatype.org/publish/requirements/#project-name-description-and-url
2.3- Información de licencia
https://central.sonatype.org/publish/requirements/#license-information
2.4- Información del desarrollador
https://central.sonatype.org/publish/requirements/#developer-information
2.5- Gestión de Configuración de Software (SCM)
Dependiendo de donde tenga alojado su código fuente tendrá que revisar cómo definirlo[10]. En el caso de GitHub la configuración SCM (Software Configuration Management) será del estilo:
<scm>
<connection>scm:git:git://github.com/simpligility/ossrh-demo.git</connection>
<developerConnection>scm:git:ssh://github.com:simpligility/ossrh-demo.git</developerConnection>
<url>http://github.com/simpligility/ossrh-demo/tree/master</url>
</scm>
Todas las opciones
https://central.sonatype.org/publish/requirements/#scm-information
2.6- Servidores para realizar la distribución
Si está utilizando el complemento de implementación de Maven, que es el comportamiento predeterminado, debe agregar una sección completa de administración de distribución.
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
https://central.sonatype.org/publish/publish-maven/#distribution-management-and-authentication
2.7- Otros Plugin requeridos
A su grupo de plugins definidos en su pom.xml añadir los siguientes:
https://gist.github.com/lcriadof/c7dbb1bf24953d4c88da5eb37c784112
Paso 3: Fichero settings.xml.
Este fichero contendrá información confidencial, como son usuarios/claves. Es un fichero que sólo puede estar en local. Hay que crearlo en un directorio concreto “.m2” de la instalación de MAVEN (en Windows suele estar en C:\Users\[cuenta usuario]\.m2 no en los datos asociados a nuestro proyecto concreto.
Ejemplo en:
https://gist.github.com/lcriadof/41be81e34f0d37069d02ceee4422f110
Fase de PUBLICACIÓN
Paso 1: Configurar mvn
Comprobar que tenemos acceso al comando mvn desde el IDE o diarectorio del proyecto
Paso 2: Desplegar en MAVEN CENTRAL
ejecutar:
mvn clean deploy
El artefacto estará subido a un repositorio (indicar cuál) que tendremos que promocionar a «Release» para que se sincronice con el repositorio central y con esto estará disponible para toda la comunidad de programadores
Paso 3: Comprobar que hemos publicado
Comprobamos que hemos publicado nuestro artefacto, por ejemplo en
https://mvnrepository.com/artifact/io.github.lcriadof/sofia/1.0
https://search.maven.org/artifact/io.github.lcriadof/sofia/1.0/jar
https://repo1.maven.org/maven2/io/github/lcriadof/sofia/
-> referencias
[1] https://mvnrepository.com/repos/central
[2] https://www.jetbrains.com/es-es/idea/
[3] https://issues.sonatype.org/secure/Signup!default.jspa
[4] Jira es una herramienta en línea para la administración de tareas de un proyecto, el seguimiento de errores e incidencias y para la gestión operativa de proyectos https://www.atlassian.com/software/jira
[5] Sonatype Inc es una entidad que se ocupa de distribuir código fuente de terceros en la comunidad de programadores https://www.sonatype.com/
[6] https://central.sonatype.org/publish/publish-maven/#distribution-management-and-authentication
[7] https://es.wikipedia.org/wiki/GNU_Privacy_Guard
[8] https://www.gpg4win.org/download.html
[9] https://central.sonatype.org/publish/requirements/
[10] https://central.sonatype.org/publish/requirements/#scm-information
Comentarios