ToursJUG - Anniversaire 2016

360 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
360
Sur SlideShare
0
Issues des intégrations
0
Intégrations
67
Actions
Partages
0
Téléchargements
4
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

×