Publier sur
un repo central
/**

* @author François Robert

*/

public class PtitbobAtToursJug {



public static void main(String... args) {

System....
Pourquoi ?
Lib qui n’existe pas
Idée du siècle
Plugin maven
complexe Iznogoud
Lib qui n’existe pas
Swagger UI+Swagger
= Swagger-UI-Integration
@SwaggerUIConfiguration

public class ApplicationConfigur...
• Coordonnées
• Description du projet
• La signature
• La licence
• Le(s) développeur(s)
• Informations de repo de source
Ce qu’il ne faut pas faire
• Intégrer un repository (autres que défaut)
• Intégrer des lib non libre
• Lib ayant une licen...
• Coordonnées
• Description du projet
• La signature
• La licence
• Le(s) développeur(s)
• Informations de repo de source
<groupId>org.shipstone</groupId>

<artifactId>swagger-ui-integration</artifactId>

<version>1.0</version>
Coordonnées du p...
Coordonnées == choix du nom de package de base
Nom de domaine
domain.fr
fr.domain……
Coordonnées == choix du nom de package de base
Repo github
com.github.ptitbob
• Coordonnées
• Description du projet
• La signature
• La licence
• Le(s) développeur(s)
• Informations de repo de source
Descriptif du projet
<url>https://github.com/ptitbob/swagger-ui-integration</url>

<name>swagger-ui-integration</name>

<d...
• Coordonnées
• Description du projet
• La signature
• La licence
• Le(s) développeur(s)
• Informations de repo de source
Disposer d’une clé PGP
Installation de gnupg2
Générer une clé
Enregistrer la clé publique
http://pgp.mit.edu
gpg2 --gen-key
Signature des jars
<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-gpg-plugin</artifactId>

<vers...
Ne mettez pas votre
passphrase
dans le pom !!!
Préférez settings.xml
<profiles>
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activatio...
• Coordonnées
• Description du projet
• La signature
• La licence
• Le(s) développeur(s)
• Informations de repo de source
Licence ?
Laquelle ?!!!!
LGPL
Licence publique générale limitée GNU
<licenses>

<license>

<name>GNU LESSER GENERAL PUBLIC LICENSE version 3</name>...
• Coordonnées
• Description du projet
• La signature
• La licence
• Le(s) développeur(s)
• Informations de repo de source
<developers>

<developer>

<name>Francois Robert</name>

<email>francois.robert@shipstone.org</email>

<url>http://www.shi...
• Coordonnées
• Description du projet
• La signature
• La licence
• Le(s) développeur(s)
• Informations de repo de source
Repo de source….
<scm>

<url>https://github.com/ptitbob/swagger-ui-integration</url>

<connection>scm:git:git@github.com:p...
Demande de publication
http://issues.sonatype.org
Open Source Software Repository Hosting (OSSRH)
Demande de publication
Il en existe d’autres
• Apache Software Foundation (for all Apache projects)
• FuseSource Forge (fo...
Créez vous un compte
Création de demande
Demande de publication
Demande de publication
Community Support - Open Source Project Repository Hosting (OSSRH)
Nouveau projet
Le projet en une ...
Demande de publication
Le groupId choisi
Site de description ou lien vers le README
L’URL (github ou bitbucket)
Login Sona...
Demande de publication
Demandedéposéele05/03
Demande de publication
… 2 jours plus tard :
Demande de publication
<distributionManagement>

<snapshotRepository>

<id>ossrh</id>

<url>https://oss.sonatype.org/conte...
Configuration de la release
Utilisation du plugin Release
Utilisation du plugin Nexus
Configuration de la release
Utilisation du plugin Release
<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactI...
Configuration de la release
Utilisation du plugin Release
mvn clean install release:clean release:prepare
Création d’un tag...
Configuration de la release
Un petit plus…
Utilisation du plugin Nexus
<plugin>

<groupId>org.sonatype.plugins</groupId>

<artifactId>nexus-staging-maven-plugin</art...
Publication de la release
En 2 temps
mvn clean install release:clean release:prepare1
mvn -Prelease clean install gpg:sign...
Publication de la release
Publication de la release
http://fr.slideshare.net/francoisrobert/toursjug-anniversaire-2016
ToursJUG - Anniversaire 2016
ToursJUG - Anniversaire 2016
ToursJUG - Anniversaire 2016
ToursJUG - Anniversaire 2016
ToursJUG - Anniversaire 2016
ToursJUG - Anniversaire 2016
ToursJUG - Anniversaire 2016
ToursJUG - Anniversaire 2016
ToursJUG - Anniversaire 2016
Prochain SlideShare
Chargement dans…5
×

ToursJUG - Anniversaire 2016

307 vues

Publié le

Comment publier une lib sur les repo maven centraux a travers un exemple : swagger-ui-integration

Publié dans : Ingénierie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
307
Sur SlideShare
0
Issues des intégrations
0
Intégrations
68
Actions
Partages
0
Téléchargements
3
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

ToursJUG - Anniversaire 2016

  1. 1. Publier sur un repo central
  2. 2. /**
 * @author François Robert
 */
 public class PtitbobAtToursJug {
 
 public static void main(String... args) {
 System.out.println("Hello everybody");
 }
 
 public Twitter getTwitter() {
 return new Twitter("@ptitbob");
 }
 
 public URL getGithub() throws MalformedURLException {
 return new URL("github.com/ptitbob");
 }
 
 }
  3. 3. Pourquoi ? Lib qui n’existe pas Idée du siècle Plugin maven complexe Iznogoud
  4. 4. Lib qui n’existe pas Swagger UI+Swagger = Swagger-UI-Integration @SwaggerUIConfiguration
 public class ApplicationConfiguration {
 }
  5. 5. • Coordonnées • Description du projet • La signature • La licence • Le(s) développeur(s) • Informations de repo de source
  6. 6. Ce qu’il ne faut pas faire • Intégrer un repository (autres que défaut) • Intégrer des lib non libre • Lib ayant une licence moins permissive
  7. 7. • Coordonnées • Description du projet • La signature • La licence • Le(s) développeur(s) • Informations de repo de source
  8. 8. <groupId>org.shipstone</groupId>
 <artifactId>swagger-ui-integration</artifactId>
 <version>1.0</version> Coordonnées du projet Sources Javadoc
  9. 9. Coordonnées == choix du nom de package de base Nom de domaine domain.fr fr.domain……
  10. 10. Coordonnées == choix du nom de package de base Repo github com.github.ptitbob
  11. 11. • Coordonnées • Description du projet • La signature • La licence • Le(s) développeur(s) • Informations de repo de source
  12. 12. Descriptif du projet <url>https://github.com/ptitbob/swagger-ui-integration</url>
 <name>swagger-ui-integration</name>
 <description>Swagger core and UI integration effortless for JavaEE application</description>
  13. 13. • Coordonnées • Description du projet • La signature • La licence • Le(s) développeur(s) • Informations de repo de source
  14. 14. Disposer d’une clé PGP Installation de gnupg2 Générer une clé Enregistrer la clé publique http://pgp.mit.edu gpg2 --gen-key
  15. 15. Signature des jars <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-gpg-plugin</artifactId>
 <version>1.6</version>
 <configuration>
 </configuration>
 <executions>
 <execution>
 <id>sign-artifacts</id>
 <phase>verify</phase>
 <goals>
 <goal>sign</goal>
 </goals>
 </execution>
 </executions>
 </plugin> -rw-r--r--+ 1 francois staff 885K 22 mar 00:24 swagger-ui-integration-1.0-javadoc.jar -rw-r--r--+ 1 francois staff 885K 22 mar 00:24 swagger-ui-integration-1.0-javadoc.jar.asc -rw-r--r--+ 1 francois staff 20K 22 mar 00:24 swagger-ui-integration-1.0-sources.jar -rw-r--r--+ 1 francois staff 20K 22 mar 00:24 swagger-ui-integration-1.0-sources.jar.asc -rw-r--r--+ 1 francois staff 805K 22 mar 00:24 swagger-ui-integration-1.0.jar -rw-r--r--+ 1 francois staff 473B 22 mar 00:24 swagger-ui-integration-1.0.jar.asc -rw-r--r--+ 1 francois staff 11K 22 mar 00:24 swagger-ui-integration-1.0.pom -rw-r--r--+ 1 francois staff 473B 22 mar 00:24 swagger-ui-integration-1.0.pom.asc
  16. 16. Ne mettez pas votre passphrase dans le pom !!!
  17. 17. Préférez settings.xml <profiles> <profile> <id>ossrh</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <gpg.executable>gpg2</gpg.executable> <gpg.passphrase>MaSuperPhraseCodée</gpg.passphrase> <gpg.keyname>Clé.Publique</gpg.keyname> </properties> </profile> </profiles>
  18. 18. • Coordonnées • Description du projet • La signature • La licence • Le(s) développeur(s) • Informations de repo de source
  19. 19. Licence ? Laquelle ?!!!!
  20. 20. LGPL Licence publique générale limitée GNU <licenses>
 <license>
 <name>GNU LESSER GENERAL PUBLIC LICENSE version 3</name>
 <url>http://www.gnu.org/licenses/lgpl-3.0.fr.html</url>
 </license>
 </licenses>
  21. 21. • Coordonnées • Description du projet • La signature • La licence • Le(s) développeur(s) • Informations de repo de source
  22. 22. <developers>
 <developer>
 <name>Francois Robert</name>
 <email>francois.robert@shipstone.org</email>
 <url>http://www.shipstone.org</url>
 <timezone>Europe/Paris</timezone>
 <roles>
 <role>Developer</role>
 </roles>
 </developer>
 </developers> Le(s) développeur(s) Utilisé pour la signature
  23. 23. • Coordonnées • Description du projet • La signature • La licence • Le(s) développeur(s) • Informations de repo de source
  24. 24. Repo de source…. <scm>
 <url>https://github.com/ptitbob/swagger-ui-integration</url>
 <connection>scm:git:git@github.com:ptitbob/swagger-ui-integration.git</connection>
 <developerConnection>scm:git:git@github.com:ptitbob/swagger-ui-integration.git</developerConnection>
 </scm>
  25. 25. Demande de publication http://issues.sonatype.org Open Source Software Repository Hosting (OSSRH)
  26. 26. Demande de publication Il en existe d’autres • Apache Software Foundation (for all Apache projects) • FuseSource Forge (focused on FUSE related projects) • nuiton.org • …
  27. 27. Créez vous un compte Création de demande Demande de publication
  28. 28. Demande de publication Community Support - Open Source Project Repository Hosting (OSSRH) Nouveau projet Le projet en une phrase Courte description
  29. 29. Demande de publication Le groupId choisi Site de description ou lien vers le README L’URL (github ou bitbucket) Login Sonatype
  30. 30. Demande de publication Demandedéposéele05/03
  31. 31. Demande de publication … 2 jours plus tard :
  32. 32. Demande de publication <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> Repo de vérification avant publication Intégration des repository dédiés
  33. 33. Configuration de la release Utilisation du plugin Release Utilisation du plugin Nexus
  34. 34. Configuration de la release Utilisation du plugin Release <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-release-plugin</artifactId>
 <version>2.5.3</version>
 <configuration>
 <tagNameFormat>v@{project.version}</tagNameFormat>
 <autoVersionSubmodules>true</autoVersionSubmodules>
 <useReleaseProfile>false</useReleaseProfile>
 <releaseProfiles>release</releaseProfiles>
 <goals>deploy</goals>
 </configuration>
 </plugin>
  35. 35. Configuration de la release Utilisation du plugin Release mvn clean install release:clean release:prepare Création d’un tag de version
  36. 36. Configuration de la release Un petit plus…
  37. 37. Utilisation du plugin Nexus <plugin>
 <groupId>org.sonatype.plugins</groupId>
 <artifactId>nexus-staging-maven-plugin</artifactId>
 <version>1.6.3</version>
 <extensions>true</extensions>
 <configuration>
 <serverId>ossrh</serverId>
 <nexusUrl>https://oss.sonatype.org/</nexusUrl>
 <autoReleaseAfterClose>true</autoReleaseAfterClose>
 </configuration>
 </plugin> <servers> <server> <id>ossrh</id> <username>ptitbob</username> <password>[password]</password> </server> </servers> pom.xml settings.xml Configuration de la release
  38. 38. Publication de la release En 2 temps mvn clean install release:clean release:prepare1 mvn -Prelease clean install gpg:sign nexus-staging:deploy 2 Se placer dans le tag généré
  39. 39. Publication de la release
  40. 40. Publication de la release
  41. 41. http://fr.slideshare.net/francoisrobert/toursjug-anniversaire-2016

×