Distribuer une librairie via maven

Franck SIMON
Franck SIMONConsultant architecte logiciel Java EE et IoT (Internet des Objets) à Transtel

Comment partager vos librairies en les déployant dans le repo de maven

TUTORIEL www.antislashn.org
Distribuer une librairie via un dépôt Maven
Objectifs
Une fois une librairie Java au point, il est intéressant de la mettre à disposition d'autres
développeurs.
Pour cela les dépôts Maven sont tout indiqués.
Ce tuto explique comment :
• créer son projet pour qu'il soit accepté dans un dépôt Maven officiel
• comment s'enregistrer auprès d'un dépôt Maven
• comment déployer sa librairie dans le dépôt Maven
Le déploiement sera effectué dans le dépôt OSSRH (Open Source Software Repository Hosting),
prévu pour accueillir les projets individuels.
Prérequis
• Avoir un groupId qui identifie vos projets de manière unique. Il s'agit de votre nom de
domaine. La convention de nommage du groupId est la même que pour les packages Java :
utiliser le nom de domaine à l'envers.
▪ www.springframework.org → org.springframework
▪ antislashn.org → org.antislashn
◦ si vous n'avez pas de nom de domaine vous pouvez utiliser l'adresse github de votre
projet
▪ io.github.username
• Le nom du projet devient l'artifactId, tout en minuscule, en utilisant le tiret - comme
séparateur de mots
◦ mon-projet
• Numéroter les versions, au format X.Y.Z, où X, Y, et Z sont des entiers, séparés par un point.
Chaque entier s'incrémentant au fil des mises à jours des versions
◦ X : identifiant de version majeure
◦ Y : identifiant de version mineure
◦ Z : identifiant de version de correction
•
Franck SIMON Titre 1/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
• L'ensemble de ces informations permettra de créer un dépendance du type :
<dependency>
<groupId>com.example.applications</groupId>
<artifactId>example-application</artifactId>
<version>1.4.7</version>
</dependency>
Franck SIMON Titre 2/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
Inscription auprès de OSSRH
• cf. https://central.sonatype.org/pages/ossrh-guide.html
• vous devez :
◦ créer un compte JIRA
▪ https://issues.sonatype.org/secure/Signup!default.jspa
◦ créez un ticket décrivant votre projet et votre organisation
▪ si vous avez un domaine, il vous sera demandé de prouver que ce domaine vous
appartient
▪ vous devrez renseigner
• le group Id
• l'URL git du projet
• adresse mail
• description du projet
• tags
◦ vous serez suivi par un responsable qui communiquera avec vous via les commentaires
sur le projet
◦ tant que votre projet ne sera pas marqué comme résolu, vous ne pourrez pas le déployer
Franck SIMON Titre 3/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
Préparation du projet pour le déploiement
En plus du jar de votre projet vous devez fournir
• la javadoc des classes
• les sources des classes
• le fichier pom.xml
Convention de nommage des fichiers à fournir.
Les exemples sont basés sur les prérequis suivants :
• groupId : com.example.application
• artifiactId : example-application
• version : 1.4.7
Fichiers à fournir :
• example-application-1.4.7.jar construit par Maven
• example-application-1.4.7-sources.jar construit par le plugin Maven
• example-application-1.4.7-javadoc.jar construit par le plugin Maven
• example-application-1.4.7.pom créé par Maven lors du déploiement
Les archives pour la javadoc et les sources peuvent être construits automatiquement en ajoutant les
plugins suivants dans le pom.xml de votre projet
Pour les sources :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
Franck SIMON Titre 4/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
Pour la javadoc :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
Le fichier pom.xml de votre projet doit contenir les métas données suivantes :
(cf. https://github.com/simpligility/ossrh-demo/blob/master/pom.xml )
• coordonnées du projet, appelées GAV
◦ groupId, artifactId, version
<groupId>com.simpligility.training</groupId>
<artifactId>ossrh-demo</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
• le nom du projet, sa description et l'URL
<name>ossrh-demo</name>
<description>A demo for deployment via OSSRH</description>
<url>http://github.com/simpligility/ossrh-demo</url>
• le type de licence
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
• les informations sur les développeurs
<developers>
<developer>
<name>Manfred Moser</name>
<email>manfred@sonatype.com</email>
<organization>Sonatype</organization>
<organizationUrl>http://www.sonatype.com</organizationUrl>
</developer>
</developers>
Franck SIMON Titre 5/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
• Les informations SCM (Software Configuration Management)
<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>
• Les éventuelles dépendances, exclusions, plugin, ...
Les quatre fichiers doivent être signés par PGP.
• si nécessaire, téléchargez GnuPG
◦ https://www.gnupg.org/download/
• générez un paire de clés
◦ gpg --gen-key
◦ laisser RSA par défaut
◦ choisir une longueur de clé de 2048
◦ la durée préconisée est de 2 ans
◦ ensuite entrez les détails demandés
• signature d'un fichier
◦ gpg -ab mon-fichier.java
▪ -a spécifie un fichier de signature ASCII
▪ -b demande un fichier de signature détaché
◦ un fichier mon-fichier.java.asc est généré
• vérifier le fichier des clés
◦ gpg2 --list-keys
• distribuer la clé publique
gpg2 --keyserver hkp://pool.sks-keyservers.net --send-keys C6EED57A
◦ la clé privée signera les différents fichiers
◦ la clé publique permettra de vérifier que vous êtes bien à l'origine de ces signatures
• ATTENTION
◦ la distribution de la clé publique peut prendre du temps (plusieurs jours pour être
propagée sur tous les serveurs), pour vérifier qu'elle est accessible :
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys C6EED57A
Franck SIMON Titre 6/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
◦ il faut que la clé publique soit accessible pour que la distribution de votre librairie soit
complètement effective
◦ sinon une erreur de vérification de clé interdira le passage dans le dépôt public
• https://central.sonatype.org/pages/releasing-the-deployment.html
Signer les fichiers avec Maven
• utilisez le plugin maven-gpg-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
• pour déployer (cf. page suivante)
◦ mvn clean deploy -Dgpg.passphrase=yourpassphrase
• ou par Eclipse via le menu contextuel
Franck SIMON Titre 7/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
Déployer dans un dépôt local
Les premiers tests de déploiement peuvent se faire dans un dépôt local
Dans le pom.xml du projet ajoutez
• une propriété pour l'URL de déploiement
◦ plus simple à gérer lorsqu'il faudra changer cette URL
<repository.url>file:///home/user/tmp</repository.url>
• dans l'élément <build> l'extension maven-wagon
◦ https://maven.apache.org/wagon/
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-http</artifactId>
<version>3.2.0</version>
</extension>
</extensions>
• élément pour la destination du déploiement
<distributionManagement>
<repository>
<id>org.antislashn.maven</id>
<name>antislashn maven</name>
<url>${repository.url}</url>
</repository>
</distributionManagement>
Vous pouvez tester le bon déroulement du déploiement avec un goal "deploy".
Normalement vous devez avoir une suite de répertoires qui ont été créés. Ces répertoire
correspondent à vos groupId, artifactId et version.
Le répertoire de la version contient l'ensemble des fichiers.
Exemple page suivante.
Franck SIMON Titre 8/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
Pour utiliser votre dépôt local, l'application cliente de votre librairie doit ajouter à son pom.xml
• la dépendance vers votre librairie
◦ exemple :
<dependency>
<groupId>com.example.applications</groupId>
<artifactId>example-application</artifactId>
<version>1.4.7</version>
</dependency>
• le dépôt où se trouve la librairie
<repositories>
<repository>
<id>com.example.applications.maven</id>
<name>example maven</name>
<url>file:///home/user/tmp</url>
</repository>
</repositories>
Franck SIMON Titre 9/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
Déploiement dans un dépôt "officiel" Maven
Pour cela vous devez prendre un compte OSSRH
cf. https://central.sonatype.org/pages/ossrh-guide.html#deployment
• créez un compte JIRA
◦ https://issues.sonatype.org/secure/Signup!default.jspa
• puis créez un demande (ticket)
◦ https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134
◦ pour prouver que le domaine que vous utilisez vous appartient bien, vous devrez ajouter
un champ TXT à votre référencement DNS
▪ la valeur de ce champ est l'URL de votre demande
Ensuite modifiez votre pom.xml
• pour ajouter le plugin de déploiement vers OSSRH
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.7</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
• ou modifiez votre <distributionManagement>
<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>
Franck SIMON Titre 10/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
Quelque soit la configuration choisie vous devez ajouter un fichier Maven settings.xml qui
contiendra vos identifiant et mot de passe
• ce fichier settings.xml doit être positionné :
◦ dans le répertoire ${maven.home}/conf/settings.xml
◦ ou dans le répertoire de l'utilisateur ${user.home}/.m2/settings.xml
<settings>
<servers>
<server>
<id>ossrh</id>
<username>your-jira-id</username>
<password>your-jira-pwd</password>
</server>
</servers>
</settings>
Le déploiement s'effectue comme d'habitude
mvn clean deploy
Vous devriez voir dans les logs de maven le bon déroulement de l'opération
Franck SIMON Titre 11/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
Utiliser Nexus Repository Manager
• l'objectif est de rendre disponible votre bibliothèque sur https://repo1.maven.org et
http://search.maven.org
• le déploiement précédant à entreposé votre bibliothèque dans le référentiel de transfert
◦ OSSRH
• votre clé publique doit avoir été publiée et vous devez vous assurer qu'elle est accessible
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys C6EED57A
• une fois connecté à OSSRH
◦ retrouvez votre repository dans la liste des "Staging Repositories"
◦ sélectionnez-le
◦ cliquez sur le bouton "Close"
▪ vérifiez qu'il n'y ait pas d'erreur
▪ s'il y en a, vous pouvez supprimer votre dépôt, corriger l'erreur et renvoyer votre
projet vers le dépôt
▪ attention aux erreurs de clé publique, attendez alors que votre clé soit accessible
avant de renvoyer le projet
◦ s'il n'y a aucune erreur alors :
▪ cliquez sur "Refresh"
▪ puis sur "Release"
• s'il s'agit du premier envoi vers le dépôt, laissez un message sur le ticket ouvert
pour votre projet pour préciser que cette première étape est finie.
▪ votre projet est maintenant disponible sur le dépôt https://repo1.maven.org/
Franck SIMON Titre 12/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
• votre bibliothèque est maintenant disponible dans le repository Maven
◦ modifiez le README.md pour indiquer la dépendance Maven à utiliser
◦ pour l'utiliser ajoutez dans vos projets la dépendance adéquate
▪ exemple de dépendance
<dependency>
<groupId>votre-groupid</groupId>
<artifactId>votre-artifactid</artifactId>
<version>version</version>
</dependency>
Franck SIMON Titre 13/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
Problèmes potentiels
La clé n'est pas reconnue lorsque le projet est déployé vers le dépôt officiel maven
• il est possible de passer par http://pool.sks-keyservers.net:11371 pour
◦ déployer la clé au format asc
gpg --armor --export you@example.com > mykey.asc
◦ vérifier que la clé publique est bien déployée
◦ serveurs utilisés :
▪ http://keyserver.ubuntu.com:11371/
▪ http://keys.gnupg.net:11371
▪ http://pool.sks-keyservers.net:11371/
Franck SIMON Titre 14/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n
TUTORIEL www.antislashn.org
Ressources
• documentation Maven
◦ https://maven.apache.org/
• gestion sémantique de version
◦ https://semver.org/lang/fr/spec/v1.0.0.html
• configurations
◦ https://central.sonatype.org/pages/requirements.html
◦ https://bitbucket.org/simpligility/ossrh-pipeline-demo/src
◦ https://github.com/simpligility/ossrh-demo/blob/master/pom.xml
• déploiement
◦ https://central.sonatype.org/pages/ossrh-guide.html#deployment
◦ http://weibeld.net/java/publish-to-maven-central.html
• PGP
◦ https://access.redhat.com/documentation/en-
US/Red_Hat_Enterprise_Linux/4/html/Step_by_Step_Guide/s1-gnupg-export.html
◦
Franck SIMON Titre 15/15
franck.simon@antislashn.org 14/05/2019 - version 1.0
n

Recommandé

Rest and the hypermedia constraint par
Rest and the hypermedia constraintRest and the hypermedia constraint
Rest and the hypermedia constraintInviqa
7.7K vues66 diapositives
The NFS Version 4 Protocol par
The NFS Version 4 ProtocolThe NFS Version 4 Protocol
The NFS Version 4 ProtocolKelum Senanayake
7.5K vues38 diapositives
Nginx Essential par
Nginx EssentialNginx Essential
Nginx EssentialGong Haibing
926 vues53 diapositives
Greenplum versus redshift and actian vectorwise comparison par
Greenplum versus redshift and actian vectorwise comparisonGreenplum versus redshift and actian vectorwise comparison
Greenplum versus redshift and actian vectorwise comparisonDr. Syed Hassan Amin
1.6K vues5 diapositives
Infrastructure as code: Cloud-Umgebungen mit Terraform verwalten par
Infrastructure as code: Cloud-Umgebungen mit Terraform verwaltenInfrastructure as code: Cloud-Umgebungen mit Terraform verwalten
Infrastructure as code: Cloud-Umgebungen mit Terraform verwalteninovex GmbH
798 vues34 diapositives
컨테이너 기술 ( Container Technology ) 발표 자료 다운로드 par
컨테이너 기술 ( Container Technology ) 발표 자료 다운로드컨테이너 기술 ( Container Technology ) 발표 자료 다운로드
컨테이너 기술 ( Container Technology ) 발표 자료 다운로드Opennaru, inc.
10.6K vues42 diapositives

Contenu connexe

Tendances

Docker London: Container Security par
Docker London: Container SecurityDocker London: Container Security
Docker London: Container SecurityPhil Estes
16.9K vues21 diapositives
Nginx par
NginxNginx
NginxGeeta Vinnakota
1.3K vues14 diapositives
VM Console Enhancements par
VM Console EnhancementsVM Console Enhancements
VM Console EnhancementsShapeBlue
730 vues28 diapositives
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까? par
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?OpenStack Korea Community
44.7K vues39 diapositives
DevOps Meetup ansible par
DevOps Meetup   ansibleDevOps Meetup   ansible
DevOps Meetup ansiblesriram_rajan
549 vues42 diapositives
Introduction to REST - API par
Introduction to REST - APIIntroduction to REST - API
Introduction to REST - APIChetan Gadodia
1.1K vues13 diapositives

Tendances(20)

Docker London: Container Security par Phil Estes
Docker London: Container SecurityDocker London: Container Security
Docker London: Container Security
Phil Estes16.9K vues
VM Console Enhancements par ShapeBlue
VM Console EnhancementsVM Console Enhancements
VM Console Enhancements
ShapeBlue730 vues
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까? par OpenStack Korea Community
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
OPENSHIFT CONTAINER PLATFORM CI/CD Build & Deploy par Natale Vinto
OPENSHIFT CONTAINER PLATFORM CI/CD Build & DeployOPENSHIFT CONTAINER PLATFORM CI/CD Build & Deploy
OPENSHIFT CONTAINER PLATFORM CI/CD Build & Deploy
Natale Vinto9.3K vues
How many ways to monitor oracle golden gate-Collaborate 14 par Bobby Curtis
How many ways to monitor oracle golden gate-Collaborate 14How many ways to monitor oracle golden gate-Collaborate 14
How many ways to monitor oracle golden gate-Collaborate 14
Bobby Curtis11.1K vues
Introduction to the Disruptor par Trisha Gee
Introduction to the DisruptorIntroduction to the Disruptor
Introduction to the Disruptor
Trisha Gee68.6K vues
Elastic Search Indexing Internals par Gaurav Kukal
Elastic Search Indexing InternalsElastic Search Indexing Internals
Elastic Search Indexing Internals
Gaurav Kukal2.6K vues
Openstack zun,virtual kubelet par Chanyeol yoon
Openstack zun,virtual kubeletOpenstack zun,virtual kubelet
Openstack zun,virtual kubelet
Chanyeol yoon1.1K vues
Jenkins Shared Libraries Workshop par Julien Pivotto
Jenkins Shared Libraries WorkshopJenkins Shared Libraries Workshop
Jenkins Shared Libraries Workshop
Julien Pivotto19.7K vues

Similaire à Distribuer une librairie via maven

Maven et industrialisation du logiciel par
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logicielENSET, Université Hassan II Casablanca
26K vues347 diapositives
Symfony2: 30 astuces et bonnes pratiques par
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
55.8K vues97 diapositives
SLIDES-625.1.1-IDL-4-build tools maven.pdf par
SLIDES-625.1.1-IDL-4-build tools maven.pdfSLIDES-625.1.1-IDL-4-build tools maven.pdf
SLIDES-625.1.1-IDL-4-build tools maven.pdfArouNa3
2 vues23 diapositives
Déploiement et débogage à distance par
Déploiement et débogage à distanceDéploiement et débogage à distance
Déploiement et débogage à distancepprem
33 vues36 diapositives
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ... par
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Pierre Ternon
4.4K vues34 diapositives
Javascript as a first programming language : votre IC prête pour la révolution ! par
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
1.5K vues136 diapositives

Similaire à Distribuer une librairie via maven(20)

Symfony2: 30 astuces et bonnes pratiques par Noel GUILBERT
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
Noel GUILBERT55.8K vues
SLIDES-625.1.1-IDL-4-build tools maven.pdf par ArouNa3
SLIDES-625.1.1-IDL-4-build tools maven.pdfSLIDES-625.1.1-IDL-4-build tools maven.pdf
SLIDES-625.1.1-IDL-4-build tools maven.pdf
ArouNa32 vues
Déploiement et débogage à distance par pprem
Déploiement et débogage à distanceDéploiement et débogage à distance
Déploiement et débogage à distance
pprem33 vues
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ... par Pierre Ternon
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Pierre Ternon4.4K vues
Javascript as a first programming language : votre IC prête pour la révolution ! par VISEO
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
VISEO1.5K vues
Drupal7 - Bonnes Pratiques (Partie 1) par Alexandre Marie
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)
Alexandre Marie1.9K vues
08 04 mise en place d'un serveur mandataire (proxy) par Noël
08 04 mise en place d'un serveur mandataire (proxy)08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)
Noël 3.4K vues
Modèles d'Azure Resource Manager: Améliorer vos déploiements sur Azure par Stephane Lapointe
Modèles d'Azure Resource Manager: Améliorer vos déploiements sur AzureModèles d'Azure Resource Manager: Améliorer vos déploiements sur Azure
Modèles d'Azure Resource Manager: Améliorer vos déploiements sur Azure
À La découverte de flow3 - t3con12 par mguermazi
À La découverte de flow3 -  t3con12À La découverte de flow3 -  t3con12
À La découverte de flow3 - t3con12
mguermazi504 vues
Plugin HAL pour Wordpress par OAccsd
Plugin HAL pour WordpressPlugin HAL pour Wordpress
Plugin HAL pour Wordpress
OAccsd1.2K vues
Installation et configuration d'openbravo par Soumia Brabije
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravo
Soumia Brabije3K vues
Cedric leblond migrer jenkins AWS vers Azure Devops par AZUG FR
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure Devops
AZUG FR142 vues
Cedric leblond migrer jenkins AWS vers Azure Devops par FactoVia
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure Devops
FactoVia119 vues
Migrer de Jenkins vers Azure DevOps les Builds Java par Cédric Leblond
Migrer de Jenkins vers Azure DevOps les Builds JavaMigrer de Jenkins vers Azure DevOps les Builds Java
Migrer de Jenkins vers Azure DevOps les Builds Java
Cédric Leblond129 vues
Spring boot anane maryem ben aziza syrine par Syrine Ben aziza
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
Syrine Ben aziza108 vues

Plus de Franck SIMON

Java 9 modules par
Java 9    modulesJava 9    modules
Java 9 modulesFranck SIMON
532 vues19 diapositives
Java 8 - lambda par
Java 8 - lambdaJava 8 - lambda
Java 8 - lambdaFranck SIMON
611 vues20 diapositives
Java 8 - interfaces par
Java 8 - interfacesJava 8 - interfaces
Java 8 - interfacesFranck SIMON
458 vues34 diapositives
Java 8 - DateTime par
Java 8 - DateTimeJava 8 - DateTime
Java 8 - DateTimeFranck SIMON
500 vues15 diapositives
Java 8 - collections et stream par
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et streamFranck SIMON
1.5K vues29 diapositives
Gwt jetty et sources de données par
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de donnéesFranck SIMON
976 vues2 diapositives

Plus de Franck SIMON(18)

Java 8 - collections et stream par Franck SIMON
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et stream
Franck SIMON1.5K vues
Gwt jetty et sources de données par Franck SIMON
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de données
Franck SIMON976 vues
Description d'un fichier de prélèvements SEPA minimum par Franck SIMON
Description d'un fichier de prélèvements SEPA minimumDescription d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimum
Franck SIMON29.1K vues
Tomcat and apache httpd training par Franck SIMON
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd training
Franck SIMON28K vues
Java - programmation concurrente par Franck SIMON
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrente
Franck SIMON2.6K vues
Android Input Method Editor par Franck SIMON
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method Editor
Franck SIMON3.9K vues
Architectures distribuées par Franck SIMON
Architectures distribuéesArchitectures distribuées
Architectures distribuées
Franck SIMON10K vues
Développement Android par Franck SIMON
Développement AndroidDéveloppement Android
Développement Android
Franck SIMON27.7K vues

Distribuer une librairie via maven

  • 1. TUTORIEL www.antislashn.org Distribuer une librairie via un dépôt Maven Objectifs Une fois une librairie Java au point, il est intéressant de la mettre à disposition d'autres développeurs. Pour cela les dépôts Maven sont tout indiqués. Ce tuto explique comment : • créer son projet pour qu'il soit accepté dans un dépôt Maven officiel • comment s'enregistrer auprès d'un dépôt Maven • comment déployer sa librairie dans le dépôt Maven Le déploiement sera effectué dans le dépôt OSSRH (Open Source Software Repository Hosting), prévu pour accueillir les projets individuels. Prérequis • Avoir un groupId qui identifie vos projets de manière unique. Il s'agit de votre nom de domaine. La convention de nommage du groupId est la même que pour les packages Java : utiliser le nom de domaine à l'envers. ▪ www.springframework.org → org.springframework ▪ antislashn.org → org.antislashn ◦ si vous n'avez pas de nom de domaine vous pouvez utiliser l'adresse github de votre projet ▪ io.github.username • Le nom du projet devient l'artifactId, tout en minuscule, en utilisant le tiret - comme séparateur de mots ◦ mon-projet • Numéroter les versions, au format X.Y.Z, où X, Y, et Z sont des entiers, séparés par un point. Chaque entier s'incrémentant au fil des mises à jours des versions ◦ X : identifiant de version majeure ◦ Y : identifiant de version mineure ◦ Z : identifiant de version de correction • Franck SIMON Titre 1/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 2. TUTORIEL www.antislashn.org • L'ensemble de ces informations permettra de créer un dépendance du type : <dependency> <groupId>com.example.applications</groupId> <artifactId>example-application</artifactId> <version>1.4.7</version> </dependency> Franck SIMON Titre 2/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 3. TUTORIEL www.antislashn.org Inscription auprès de OSSRH • cf. https://central.sonatype.org/pages/ossrh-guide.html • vous devez : ◦ créer un compte JIRA ▪ https://issues.sonatype.org/secure/Signup!default.jspa ◦ créez un ticket décrivant votre projet et votre organisation ▪ si vous avez un domaine, il vous sera demandé de prouver que ce domaine vous appartient ▪ vous devrez renseigner • le group Id • l'URL git du projet • adresse mail • description du projet • tags ◦ vous serez suivi par un responsable qui communiquera avec vous via les commentaires sur le projet ◦ tant que votre projet ne sera pas marqué comme résolu, vous ne pourrez pas le déployer Franck SIMON Titre 3/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 4. TUTORIEL www.antislashn.org Préparation du projet pour le déploiement En plus du jar de votre projet vous devez fournir • la javadoc des classes • les sources des classes • le fichier pom.xml Convention de nommage des fichiers à fournir. Les exemples sont basés sur les prérequis suivants : • groupId : com.example.application • artifiactId : example-application • version : 1.4.7 Fichiers à fournir : • example-application-1.4.7.jar construit par Maven • example-application-1.4.7-sources.jar construit par le plugin Maven • example-application-1.4.7-javadoc.jar construit par le plugin Maven • example-application-1.4.7.pom créé par Maven lors du déploiement Les archives pour la javadoc et les sources peuvent être construits automatiquement en ajoutant les plugins suivants dans le pom.xml de votre projet Pour les sources : <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> Franck SIMON Titre 4/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 5. TUTORIEL www.antislashn.org Pour la javadoc : <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> Le fichier pom.xml de votre projet doit contenir les métas données suivantes : (cf. https://github.com/simpligility/ossrh-demo/blob/master/pom.xml ) • coordonnées du projet, appelées GAV ◦ groupId, artifactId, version <groupId>com.simpligility.training</groupId> <artifactId>ossrh-demo</artifactId> <version>1.0</version> <packaging>jar</packaging> • le nom du projet, sa description et l'URL <name>ossrh-demo</name> <description>A demo for deployment via OSSRH</description> <url>http://github.com/simpligility/ossrh-demo</url> • le type de licence <licenses> <license> <name>The Apache Software License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> </license> </licenses> • les informations sur les développeurs <developers> <developer> <name>Manfred Moser</name> <email>manfred@sonatype.com</email> <organization>Sonatype</organization> <organizationUrl>http://www.sonatype.com</organizationUrl> </developer> </developers> Franck SIMON Titre 5/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 6. TUTORIEL www.antislashn.org • Les informations SCM (Software Configuration Management) <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> • Les éventuelles dépendances, exclusions, plugin, ... Les quatre fichiers doivent être signés par PGP. • si nécessaire, téléchargez GnuPG ◦ https://www.gnupg.org/download/ • générez un paire de clés ◦ gpg --gen-key ◦ laisser RSA par défaut ◦ choisir une longueur de clé de 2048 ◦ la durée préconisée est de 2 ans ◦ ensuite entrez les détails demandés • signature d'un fichier ◦ gpg -ab mon-fichier.java ▪ -a spécifie un fichier de signature ASCII ▪ -b demande un fichier de signature détaché ◦ un fichier mon-fichier.java.asc est généré • vérifier le fichier des clés ◦ gpg2 --list-keys • distribuer la clé publique gpg2 --keyserver hkp://pool.sks-keyservers.net --send-keys C6EED57A ◦ la clé privée signera les différents fichiers ◦ la clé publique permettra de vérifier que vous êtes bien à l'origine de ces signatures • ATTENTION ◦ la distribution de la clé publique peut prendre du temps (plusieurs jours pour être propagée sur tous les serveurs), pour vérifier qu'elle est accessible : gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys C6EED57A Franck SIMON Titre 6/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 7. TUTORIEL www.antislashn.org ◦ il faut que la clé publique soit accessible pour que la distribution de votre librairie soit complètement effective ◦ sinon une erreur de vérification de clé interdira le passage dans le dépôt public • https://central.sonatype.org/pages/releasing-the-deployment.html Signer les fichiers avec Maven • utilisez le plugin maven-gpg-plugin <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <executions> <execution> <id>sign-artifacts</id> <phase>verify</phase> <goals> <goal>sign</goal> </goals> </execution> </executions> </plugin> • pour déployer (cf. page suivante) ◦ mvn clean deploy -Dgpg.passphrase=yourpassphrase • ou par Eclipse via le menu contextuel Franck SIMON Titre 7/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 8. TUTORIEL www.antislashn.org Déployer dans un dépôt local Les premiers tests de déploiement peuvent se faire dans un dépôt local Dans le pom.xml du projet ajoutez • une propriété pour l'URL de déploiement ◦ plus simple à gérer lorsqu'il faudra changer cette URL <repository.url>file:///home/user/tmp</repository.url> • dans l'élément <build> l'extension maven-wagon ◦ https://maven.apache.org/wagon/ <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-http</artifactId> <version>3.2.0</version> </extension> </extensions> • élément pour la destination du déploiement <distributionManagement> <repository> <id>org.antislashn.maven</id> <name>antislashn maven</name> <url>${repository.url}</url> </repository> </distributionManagement> Vous pouvez tester le bon déroulement du déploiement avec un goal "deploy". Normalement vous devez avoir une suite de répertoires qui ont été créés. Ces répertoire correspondent à vos groupId, artifactId et version. Le répertoire de la version contient l'ensemble des fichiers. Exemple page suivante. Franck SIMON Titre 8/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 9. TUTORIEL www.antislashn.org Pour utiliser votre dépôt local, l'application cliente de votre librairie doit ajouter à son pom.xml • la dépendance vers votre librairie ◦ exemple : <dependency> <groupId>com.example.applications</groupId> <artifactId>example-application</artifactId> <version>1.4.7</version> </dependency> • le dépôt où se trouve la librairie <repositories> <repository> <id>com.example.applications.maven</id> <name>example maven</name> <url>file:///home/user/tmp</url> </repository> </repositories> Franck SIMON Titre 9/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 10. TUTORIEL www.antislashn.org Déploiement dans un dépôt "officiel" Maven Pour cela vous devez prendre un compte OSSRH cf. https://central.sonatype.org/pages/ossrh-guide.html#deployment • créez un compte JIRA ◦ https://issues.sonatype.org/secure/Signup!default.jspa • puis créez un demande (ticket) ◦ https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134 ◦ pour prouver que le domaine que vous utilisez vous appartient bien, vous devrez ajouter un champ TXT à votre référencement DNS ▪ la valeur de ce champ est l'URL de votre demande Ensuite modifiez votre pom.xml • pour ajouter le plugin de déploiement vers OSSRH <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <version>1.6.7</version> <extensions>true</extensions> <configuration> <serverId>ossrh</serverId> <nexusUrl>https://oss.sonatype.org/</nexusUrl> <autoReleaseAfterClose>true</autoReleaseAfterClose> </configuration> </plugin> • ou modifiez votre <distributionManagement> <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> Franck SIMON Titre 10/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 11. TUTORIEL www.antislashn.org Quelque soit la configuration choisie vous devez ajouter un fichier Maven settings.xml qui contiendra vos identifiant et mot de passe • ce fichier settings.xml doit être positionné : ◦ dans le répertoire ${maven.home}/conf/settings.xml ◦ ou dans le répertoire de l'utilisateur ${user.home}/.m2/settings.xml <settings> <servers> <server> <id>ossrh</id> <username>your-jira-id</username> <password>your-jira-pwd</password> </server> </servers> </settings> Le déploiement s'effectue comme d'habitude mvn clean deploy Vous devriez voir dans les logs de maven le bon déroulement de l'opération Franck SIMON Titre 11/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 12. TUTORIEL www.antislashn.org Utiliser Nexus Repository Manager • l'objectif est de rendre disponible votre bibliothèque sur https://repo1.maven.org et http://search.maven.org • le déploiement précédant à entreposé votre bibliothèque dans le référentiel de transfert ◦ OSSRH • votre clé publique doit avoir été publiée et vous devez vous assurer qu'elle est accessible gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys C6EED57A • une fois connecté à OSSRH ◦ retrouvez votre repository dans la liste des "Staging Repositories" ◦ sélectionnez-le ◦ cliquez sur le bouton "Close" ▪ vérifiez qu'il n'y ait pas d'erreur ▪ s'il y en a, vous pouvez supprimer votre dépôt, corriger l'erreur et renvoyer votre projet vers le dépôt ▪ attention aux erreurs de clé publique, attendez alors que votre clé soit accessible avant de renvoyer le projet ◦ s'il n'y a aucune erreur alors : ▪ cliquez sur "Refresh" ▪ puis sur "Release" • s'il s'agit du premier envoi vers le dépôt, laissez un message sur le ticket ouvert pour votre projet pour préciser que cette première étape est finie. ▪ votre projet est maintenant disponible sur le dépôt https://repo1.maven.org/ Franck SIMON Titre 12/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 13. TUTORIEL www.antislashn.org • votre bibliothèque est maintenant disponible dans le repository Maven ◦ modifiez le README.md pour indiquer la dépendance Maven à utiliser ◦ pour l'utiliser ajoutez dans vos projets la dépendance adéquate ▪ exemple de dépendance <dependency> <groupId>votre-groupid</groupId> <artifactId>votre-artifactid</artifactId> <version>version</version> </dependency> Franck SIMON Titre 13/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 14. TUTORIEL www.antislashn.org Problèmes potentiels La clé n'est pas reconnue lorsque le projet est déployé vers le dépôt officiel maven • il est possible de passer par http://pool.sks-keyservers.net:11371 pour ◦ déployer la clé au format asc gpg --armor --export you@example.com > mykey.asc ◦ vérifier que la clé publique est bien déployée ◦ serveurs utilisés : ▪ http://keyserver.ubuntu.com:11371/ ▪ http://keys.gnupg.net:11371 ▪ http://pool.sks-keyservers.net:11371/ Franck SIMON Titre 14/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n
  • 15. TUTORIEL www.antislashn.org Ressources • documentation Maven ◦ https://maven.apache.org/ • gestion sémantique de version ◦ https://semver.org/lang/fr/spec/v1.0.0.html • configurations ◦ https://central.sonatype.org/pages/requirements.html ◦ https://bitbucket.org/simpligility/ossrh-pipeline-demo/src ◦ https://github.com/simpligility/ossrh-demo/blob/master/pom.xml • déploiement ◦ https://central.sonatype.org/pages/ossrh-guide.html#deployment ◦ http://weibeld.net/java/publish-to-maven-central.html • PGP ◦ https://access.redhat.com/documentation/en- US/Red_Hat_Enterprise_Linux/4/html/Step_by_Step_Guide/s1-gnupg-export.html ◦ Franck SIMON Titre 15/15 franck.simon@antislashn.org 14/05/2019 - version 1.0 n