SlideShare uma empresa Scribd logo
1 de 15
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Container security
Container securityContainer security
Container securityAnthony Chow
 
OMG DDS: The Data Distribution Service for Real-Time Systems
OMG DDS: The Data Distribution Service for Real-Time SystemsOMG DDS: The Data Distribution Service for Real-Time Systems
OMG DDS: The Data Distribution Service for Real-Time SystemsAngelo Corsaro
 
Docker, Linux Containers (LXC), and security
Docker, Linux Containers (LXC), and securityDocker, Linux Containers (LXC), and security
Docker, Linux Containers (LXC), and securityJérôme Petazzoni
 
Android AIDL Concept
Android AIDL ConceptAndroid AIDL Concept
Android AIDL ConceptCharile Tsai
 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service TutorialAngelo Corsaro
 
CI/CD with AWS Code Services
CI/CD with AWS Code ServicesCI/CD with AWS Code Services
CI/CD with AWS Code ServicesPulkit Gupta
 
The DDS Tutorial Part II
The DDS Tutorial Part IIThe DDS Tutorial Part II
The DDS Tutorial Part IIAngelo Corsaro
 
Vulgarisation de la technologie de containers Docker
Vulgarisation de la technologie de containers DockerVulgarisation de la technologie de containers Docker
Vulgarisation de la technologie de containers DockerFlorian Bobin
 
Always on in SQL Server 2012
Always on in SQL Server 2012Always on in SQL Server 2012
Always on in SQL Server 2012Fadi Abdulwahab
 
Docker intro
Docker introDocker intro
Docker introOleg Z
 
Redis Introduction
Redis IntroductionRedis Introduction
Redis IntroductionAlex Su
 
Docker Networking: Control plane and Data plane
Docker Networking: Control plane and Data planeDocker Networking: Control plane and Data plane
Docker Networking: Control plane and Data planeDocker, Inc.
 
Proxysql use case scenarios fosdem17
Proxysql use case scenarios    fosdem17Proxysql use case scenarios    fosdem17
Proxysql use case scenarios fosdem17Alkin Tezuysal
 

Mais procurados (20)

Container security
Container securityContainer security
Container security
 
OMG DDS: The Data Distribution Service for Real-Time Systems
OMG DDS: The Data Distribution Service for Real-Time SystemsOMG DDS: The Data Distribution Service for Real-Time Systems
OMG DDS: The Data Distribution Service for Real-Time Systems
 
Introduction to RTI DDS
Introduction to RTI DDSIntroduction to RTI DDS
Introduction to RTI DDS
 
Docker, Linux Containers (LXC), and security
Docker, Linux Containers (LXC), and securityDocker, Linux Containers (LXC), and security
Docker, Linux Containers (LXC), and security
 
Android AIDL Concept
Android AIDL ConceptAndroid AIDL Concept
Android AIDL Concept
 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service Tutorial
 
redis basics
redis basicsredis basics
redis basics
 
CI/CD with AWS Code Services
CI/CD with AWS Code ServicesCI/CD with AWS Code Services
CI/CD with AWS Code Services
 
The DDS Tutorial Part II
The DDS Tutorial Part IIThe DDS Tutorial Part II
The DDS Tutorial Part II
 
PostgreSQL
PostgreSQL PostgreSQL
PostgreSQL
 
What is Docker?
What is Docker?What is Docker?
What is Docker?
 
Vulgarisation de la technologie de containers Docker
Vulgarisation de la technologie de containers DockerVulgarisation de la technologie de containers Docker
Vulgarisation de la technologie de containers Docker
 
Always on in SQL Server 2012
Always on in SQL Server 2012Always on in SQL Server 2012
Always on in SQL Server 2012
 
Docker intro
Docker introDocker intro
Docker intro
 
Window server 2008
Window server 2008Window server 2008
Window server 2008
 
Introduction to redis
Introduction to redisIntroduction to redis
Introduction to redis
 
Redis Introduction
Redis IntroductionRedis Introduction
Redis Introduction
 
Docker Networking: Control plane and Data plane
Docker Networking: Control plane and Data planeDocker Networking: Control plane and Data plane
Docker Networking: Control plane and Data plane
 
Proxysql use case scenarios fosdem17
Proxysql use case scenarios    fosdem17Proxysql use case scenarios    fosdem17
Proxysql use case scenarios fosdem17
 
Active Directory Trusts
Active Directory TrustsActive Directory Trusts
Active Directory Trusts
 

Semelhante a Distribuer une librairie via maven

Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
 
SLIDES-625.1.1-IDL-4-build tools maven.pdf
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
 
Déploiement et débogage à distance
Déploiement et débogage à distanceDéploiement et débogage à distance
Déploiement et débogage à distancepprem
 
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 ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Pierre Ternon
 
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 !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Alexandre Marie
 
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)
08 04 mise en place d'un serveur mandataire (proxy)Noël
 
Modèles d'Azure Resource Manager: Améliorer vos déploiements sur Azure
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 AzureStephane Lapointe
 
À La découverte de flow3 - t3con12
À La découverte de flow3 -  t3con12À La découverte de flow3 -  t3con12
À La découverte de flow3 - t3con12mguermazi
 
Plugin HAL pour Wordpress
Plugin HAL pour WordpressPlugin HAL pour Wordpress
Plugin HAL pour WordpressOAccsd
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à dockerBoubker ABERWAG
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravoSoumia Brabije
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsFactoVia
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsAZUG FR
 
Migrer de Jenkins vers Azure DevOps les Builds Java
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 JavaCédric Leblond
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSyrine Ben aziza
 
Journée DevOps : Les piliers du déploiement applicatif avec XL Deploy de Xebi...
Journée DevOps : Les piliers du déploiement applicatif avec XL Deploy de Xebi...Journée DevOps : Les piliers du déploiement applicatif avec XL Deploy de Xebi...
Journée DevOps : Les piliers du déploiement applicatif avec XL Deploy de Xebi...Publicis Sapient Engineering
 

Semelhante a Distribuer une librairie via maven (20)

Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
 
SLIDES-625.1.1-IDL-4-build tools maven.pdf
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
 
Déploiement et débogage à distance
Déploiement et débogage à distanceDéploiement et débogage à distance
Déploiement et débogage à distance
 
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 ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
 
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 !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)
 
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)
08 04 mise en place d'un serveur mandataire (proxy)
 
Présentation1
Présentation1Présentation1
Présentation1
 
Modèles d'Azure Resource Manager: Améliorer vos déploiements sur Azure
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
À La découverte de flow3 -  t3con12À La découverte de flow3 -  t3con12
À La découverte de flow3 - t3con12
 
Plugin HAL pour Wordpress
Plugin HAL pour WordpressPlugin HAL pour Wordpress
Plugin HAL pour Wordpress
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à docker
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravo
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure Devops
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure Devops
 
Octo Maven.pdf
Octo Maven.pdfOcto Maven.pdf
Octo Maven.pdf
 
Migrer de Jenkins vers Azure DevOps les Builds Java
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
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
 
Journée DevOps : Les piliers du déploiement applicatif avec XL Deploy de Xebi...
Journée DevOps : Les piliers du déploiement applicatif avec XL Deploy de Xebi...Journée DevOps : Les piliers du déploiement applicatif avec XL Deploy de Xebi...
Journée DevOps : Les piliers du déploiement applicatif avec XL Deploy de Xebi...
 

Mais de Franck SIMON

Java 8 - interfaces
Java 8 - interfacesJava 8 - interfaces
Java 8 - interfacesFranck SIMON
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et streamFranck SIMON
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de donnéesFranck SIMON
 
Description d'un fichier de prélèvements SEPA minimum
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 minimumFranck SIMON
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd trainingFranck SIMON
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMXFranck SIMON
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrenteFranck SIMON
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method EditorFranck SIMON
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuéesFranck SIMON
 
Développement Android
Développement AndroidDéveloppement Android
Développement AndroidFranck SIMON
 
Java scripting api
Java scripting apiJava scripting api
Java scripting apiFranck SIMON
 

Mais de Franck SIMON (18)

Java 9 modules
Java 9    modulesJava 9    modules
Java 9 modules
 
Java 8 - lambda
Java 8 - lambdaJava 8 - lambda
Java 8 - lambda
 
Java 8 - interfaces
Java 8 - interfacesJava 8 - interfaces
Java 8 - interfaces
 
Java 8 - DateTime
Java 8 - DateTimeJava 8 - DateTime
Java 8 - DateTime
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et stream
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de données
 
Description d'un fichier de prélèvements SEPA minimum
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
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd training
 
Android ORMLite
Android   ORMLiteAndroid   ORMLite
Android ORMLite
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMX
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrente
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method Editor
 
Squid
SquidSquid
Squid
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuées
 
Android NDK
Android   NDKAndroid   NDK
Android NDK
 
Développement Android
Développement AndroidDéveloppement Android
Développement Android
 
jQuery
jQueryjQuery
jQuery
 
Java scripting api
Java scripting apiJava scripting api
Java scripting api
 

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