toursjug - anniversaire 2016
TRANSCRIPT
Publier sur un repo central
/** * @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"); }}
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@SwaggerUIConfigurationpublic class ApplicationConfiguration {}
• 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 licence moins permissive
• 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 projet
Sour
ces Javadoc
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> <description>Swagger core and UI integration effortless for JavaEE application</description>
• 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é publiquehttp://pgp.mit.edu
gpg2 --gen-key
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
Ne mettez pas votrepassphrase
dans le pom !!!
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>
• Coordonnées• Description du projet• La signature• La licence• Le(s) développeur(s)• Informations de repo de source
Licence ?
Laquelle ?!!!!
LGPLLicence 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>
• 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>[email protected]</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
• 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:[email protected]:ptitbob/swagger-ui-integration.git</connection> <developerConnection>scm:git:[email protected]:ptitbob/swagger-ui-integration.git</developerConnection> </scm>
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 (focused on FUSE related projects) • nuiton.org • …
Créez vous un compte
Création de demande
Demande de publication
Demande de publicationCommunity Support - Open Source Project Repository Hosting (OSSRH)
Nouveau projet
Le projet en une phrase
Courte description
Demande de publication
Le groupId choisi
Site de description ou lien vers le README
L’URL (github ou bitbucket)
Login Sonatype
Demande de publication
Demande déposée le 05/03
Demande de publication… 2 jours plus tard :
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
Configuration de la release
Utilisation du plugin Release
Utilisation du plugin Nexus
Configuration de la releaseUtilisation 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>
Configuration de la releaseUtilisation du plugin Release
mvn clean install release:clean release:prepare
Création d’un tag de version
Configuration de la releaseUn petit plus…
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.xmlsettings.xml
Configuration de la release
Publication de la releaseEn 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é
Publication de la release
Publication de la release
http://fr.slideshare.net/francoisrobert/toursjug-anniversaire-2016