SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
Takahiro Inoue
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
kumake
 
Dovecot Director 概要
Dovecot Director 概要Dovecot Director 概要
Dovecot Director 概要
SATOH Fumiyasu
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
 

Tendances (20)

Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
 
State of Big Data on ARM64 / AArch64 - Apache Bigtop
State of Big Data on ARM64 / AArch64 - Apache BigtopState of Big Data on ARM64 / AArch64 - Apache Bigtop
State of Big Data on ARM64 / AArch64 - Apache Bigtop
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
vcs_infoを使おう
vcs_infoを使おうvcs_infoを使おう
vcs_infoを使おう
 
Java - Lombok
Java - LombokJava - Lombok
Java - Lombok
 
Dovecot Director 概要
Dovecot Director 概要Dovecot Director 概要
Dovecot Director 概要
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
開発キックオフ時にマネージャが行うべき11のこと ~Visual Studio Online & TFS 使い始めと HOME 画面の構成
開発キックオフ時にマネージャが行うべき11のこと ~Visual Studio Online & TFS 使い始めと HOME 画面の構成開発キックオフ時にマネージャが行うべき11のこと ~Visual Studio Online & TFS 使い始めと HOME 画面の構成
開発キックオフ時にマネージャが行うべき11のこと ~Visual Studio Online & TFS 使い始めと HOME 画面の構成
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
WordPress 不正アクセス事例の傾向と対策(さくらのビアバッシュ in DEP.@神戸元町)
WordPress 不正アクセス事例の傾向と対策(さくらのビアバッシュ in DEP.@神戸元町)WordPress 不正アクセス事例の傾向と対策(さくらのビアバッシュ in DEP.@神戸元町)
WordPress 不正アクセス事例の傾向と対策(さくらのビアバッシュ in DEP.@神戸元町)
 
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Similaire à Distribuer une librairie via maven

À La découverte de flow3 - t3con12
À La découverte de flow3 -  t3con12À La découverte de flow3 -  t3con12
À La découverte de flow3 - t3con12
mguermazi
 

Similaire à 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...
 

Plus de Franck SIMON

Plus 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