Registrate en central.sonatype.com, también puedes iniciar sesión con tu cuenta de Github. Una vez dentro, en el menú de tu cuenta aparece una opción llamada namespaces, necesitas uno para poder publicar tu proyecto.
Si iniciaste sesión con tu cuenta de Github, en automático puedes utilizar el namespace de tu usuario (ejemplo io.github.vjdv). Si como en mi caso registras tu dominio como espacio (ejemplo net.vjdv) este debe ser verificado. Al registrar tu espacio te dará un código de verificación el cuál se debe agregar como registro TXT a tu dominio. Una vez agregado solicita la confirmación y en unos minutos aparecerá como verificado.
Generé un nuevo proyecto Maven con IntelliJ con la configuración de quickstart. Para la publicación elegí hacerlo con el plugin central-publishing-maven-plugin
para que se construya y publique automáticamente con Github actions. Se agrega al pom.xml
:
<build>
<plugins>
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>0.7.0</version>
<extensions>true</extensions>
<configuration>
<publishingServerId>central</publishingServerId>
<autoPublish>true</autoPublish>
</configuration>
</plugin>
</plugins>
</build>
También necesitarás un token de acceso, se puede generar en la opción View Account de Sonatype. Ese será necesario para poblar el archivo settings.xml
y que el jar se suba correctamente a Maven Central. También hay requerimientos básico que debe tener el empaquetado:
- Una licencia, Apache por ejemplo
- Datos del desarrollador y descripción de la librería en el pom
- Incluir la documentación javadoc
- Incluir el código fuente
- Firmar el jar con claves GPG
Detalles adicionales de la librería
Estos se colocan en el pom.xml
, adjunto un ejemplo donde seleccioné la licencia Apache y el ejemplo de un repositorio Github:
<name>${project.groupId}:${project.artifactId}</name>
<description>Example description</description>
<url>http://www.example.com/example-application</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Manfred Moser</name>
<email>manfred@sonatype.com</email>
<organization>Sonatype</organization>
<organizationUrl>http://www.sonatype.com</organizationUrl>
</developer>
</developers>
<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>
Documentación y código fuente
Se consigue fácilmente con estos dos plugins, no necesitan configuración adicional:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
Firma GPG
Para firmar el jar se requiere generar una llave gpg, en mi caso utilizaré la misma que hice para firmar mis commits. La llave pública se debe exportar y publicar a un repositorio de llaves público para que maven pueda verificar el jar con esa llave.
Este plugin se encarga del firmado gpg:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
El archivo settings.xml
deberá llevar una configuración como la siguiente:
<settings>
<servers>
<server>
<id>central</id>
<username><!-- your token username --></username>
<password><!-- your token password --></password>
</server>
</servers>
<profiles>
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.executable>gpg2</gpg.executable>
<gpg.passphrase>the_pass_phrase</gpg.passphrase>
</properties>
</profile>
</profiles>
</settings>
Dependiendo de tu instalación, debes ajustar el nombre del ejecutable como gpg
o gpg2
, the_pass_phrase es la frase que desbloquea la llave privada que hayas generado. En la configuración del servidor central debes colocar el usuario y contraseña del token generado en central.
Solo falta publicar la llave pública para que maven pueda verificarla.
gpg --keyserver keyserver.ubuntu.com --send-keys TU_LLAVE
Al ejecutar la tarea deploy
de maven, se comenzará con todo el proceso de compilación, generación del jar, su firmado, empaquetado de documentación y código fuente, para finalizar con la publicación. Cuando termine debes entrar nuevamente a tu cuenta de maven y darle en "Publicar" (publish) a tu paquete subido, después de ese momento como a los 10 o 30 minutos podrás utilizar tu paquete como dependencia.
Puedes basarte en mi pequeña librería quickquery que ya está disponible en maven.