Vous avez un projet open source qui produit des Jars une fois packagé. Le réflexe dans ce cas est souvent de se tourner vers OSSRH pour partager son projet à grande échelle (en plus Github, Gitlab ou équivalent).

OSSRH (pour Open Source Software Repository Hosting) représente le repo Maven souvent référencé sous le nom Maven Central et géré par la société Sonatype. C'est lui qui contient une grande majorité des binaires des projets open sources, que nous retrouvons lorsque nous récupérons des dépendances à travers Maven, Gradle ou SBT. OSSRH est basé sur gestionnaire de repo Nexus, développé lui aussi pas Nexus.

Nous allons voir dans cet article un modus operandi possible pour transmettre votre livrable sur Maven Central, surtout si c'est la première fois que vous le fait !

Phase 1 : Se faire référencer auprès de Sonatype

Si votre projet est nouveau, si le group ID associé à votre projet n'existe pas encore et si vous n'êtes pas encore référencé auprès de Sonatype, il va falloir que vous alliez faire un tour sur leur Jira.

La création de compte est immédiate. Par contre, la gestion des tickets Jira est processus faisant intervenir des humains. Il faut compter quelques heures avant une intervention.

Phase 2 : PGP

PGP est l'acronyme de Pretty Good Privacy. C'est un outils dont le but est de réaliser différentes tâches sur la base de chiffrement cryptographique. Il permet notamment d’apposer des signatures à du contenu électronique. PGP se base sur le standard OpenPGP, définit par l'IETF dans le RFC 4880. Un autre outil se base sur OpenPGP. Il s'agit de GnuPG (pour Gnu Privacy Guard), que nous allons utiliser ici.

PGP sert dans le cadre de la publication sous OSSRH à associer une signature aux éléments à livrer. De son côté, OSSRH utilise la signature pour la vérifier au près d'un serveur de clés.

En utilisant GnuPG (que vous devrez avoir préalablement installé), la génération de la clé passe par la commande gpg et l'option --generate-key. Il existe à partir de là, plusieurs façon de renseigner les informations pour générer la clé. La méthode la plus limpide à mon goût consiste à créer un fichier script GnuPG.

# File: gpg-add-me
%echo Generate key for François Sarradin @ MyDomain

Key-Type: RSA
Key-Length: 4096

Name-Real: François Sarradin
Name-Email: [email protected]
Name-Comment: François Sarradin @ MyDomain
Expire-Date: 0

%commit
%echo done

Un champ a volontairement été oublié dans ce fichier : il s'agit du champ Passphrase. J'ai personnellement avec les mots de passe en clair dans un fichier. Mais il est possible de fournir autrement la passphrase pour la génération de la clé :

Cependant, même avec ces options, nous restons dans un cadre où votre passphrase apparaît en clair quelque part, dans un fichier ou sur votre terminal. Par éviter ça, je vous propose le script suivant, qui récupère votre passphrase sans l'afficher avec la commande read -s et la transmet à gpg.

$ echo "Passphrase:";\\
read -s pass;\\
gpg --batch --pinentry-mode loopback --passphrase "$pass" --generate-key gpg-add-me;\\
unset pass