vendredi 26 septembre 2014

Managez proprement vos ressources JS et CSS avec Maven, Gradle, Play! grâce à WebJars ! (bye Bower ?)


Toutes vos ressources JS et CSS, paquagées, versionnées, embarquées dans des Jars et disponibles via le repository Maven. Je suis conquis.

Je peux enfin me passer de Bower ... En tant que Javaïste, la mise en oeuvre de toute l'usine logicielle JS (node, yo, grunt, bower voire ruby ...) ne m’enchante pas vraiment et me donne l'impression de complexifier mon environnement plus qu'autre chose.

Bien qu'existant depuis quelques temps, je viens de découvrir Webjars, par hasard, en parcourant un bout de code.
Le fonctionnement est simple : Les librairies JS ou ressources CSS sont packagées dans des jar de telle manière qu'elles sont automatiquement exposées comme des ressources statiques.

Prenons un exemple simple : Un projet Java, avec en front AngularJS et Bootstrap


1) Creation d'un projet web maven

Vous savez faire ... :-)

2) Ajoutez les dépendances WebJars pour AngularJS et Bootstrap

Ajoutez dans le POM :
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>angularjs</artifactId>
    <version>1.2.25</version>
</dependency>

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>bootstrap</artifactId>
    <version>3.2.0</version>
</dependency>

3) Codez votre front

Les fichiers js et css propres à mon projet, je les place sous resources/public :


Pour importer vos ressources, rien de plus simple. Votre IDE trouvent les librairies présentes dans les jar :




4) Nous sommes en Java donc, partons sur Spring Boot par exemple pour le backend

Pour continuer dans la simplicité de mise en oeuvre, j'utilise Spring Boot pour le serveur.
Une fois les dépendances Spring déclarées, la classe Main créée pour lancer le serveur je suis fin prêt à lancer l'application.

Voici le lien github vers le code où j'ai découvert Webjars (il s'agit ici d'un exemple de mise en oeuvre de Spring Security et d'AngularJS pour sécuriser, via un token, l'accès à des services REST :
https://github.com/joshlong/boot-examples/tree/master/x-auth-security

5) C'est tout !

Avec la facilité d'utilisation de Spring Boot, associée aux fonctionnalités de "live edit" de mon IDE avec mon navigateur, je n'ai plus aucun besoin de grunt non plus...

Quand je regarde l'arborescence de mon projet .... je me sens léger tout d'un coup !

Une librairie n'existe pas ! contribuez !


Webjars contient auourd'hui + de 500 libraires, vous pouvez y contribuer et en packager vous-mêmes, la procédure est expliquée dans la doc.


mercredi 14 mai 2014

Comment utiliser Bintray pour déployer vos artefacts Maven et les partager

Avant de vous présenter comment configurer votre projet Maven afin de profiter de cette plateforme, une rapide présentation ...


Qu'est ce que c'est que Bintray ?

Créée par JFrog  actuel éditeur d'Artifactory, Bintray est une plateforme sociale pour le stockage et la distribution des binaires de vos projets. Ce SaaS, libre et gratuit, vous met à disposition vos propres repositories pour les principales technologies utilisées aujourd'hui : Maven, Debian, RPM et un repository générique. Vous pouvez donc fournir vos logiciels et libraires, liés à une licence Open-source, via Maven, Gradle, Yum, Apt ou par un download classique.

Cette plateforme est qualifée de sociale car elle fournit un espace d'échange autour de votre projet, à travers des notions de crédits, de feedbacks des utilisateurs. Elle s'intègre avec Twitter et Github.

Parmis les utilisateurs de Bintray, vous trouverez entre autres : Spring, Vert.X, Jenkins, Netty, Joda-time ...

A terme (si ce n'est pas déjà le cas), Bintray va devenir la plateforme de distribution incontournable tout comme l'est devenue GitHub pour les sources.

Les + de Bintray : Statistiques, Social ....

    • La publication des binaires est extrêmement simple
    • Feedbacks, Interactions, popularité et votes sur les binaires
    • Accès aux infos des "publishers" (compte Twitter, Github, G+, site web ...)
    • Notification de nouvelles releases (notamment via Twitter)
    • Gestion des notes de release (importables depuis Github)
    • Intégration avec Maven, Gradle, Yum et Apt
    • Recherche full-text pour trouver vos binaires
    • Statistiques quasi temps-réel
    • Les binaires sont disponibles à travers un CDN
    • Aide à la visibilité de vos projets :
      • Création de liens de téléchargement sous forme de snippets (badge, markdown, html ou Asciidoc)
      • Création de liens de notifications pour augmenter vos "watchers"

Comment déployer un artefact sur votre repository Maven ?


  • La première chose à faire c'est de se créer un compte, donc rendez-vous ici.
  • Vous avez maintenant vos repositories de prêts 
  • Cliquez sur le repo Maven.
    Bintray décompose votre repository en "package". Vous devez donc en créer au moins un pour pouvoir déployer vos artefacts.
  • Ensuite, déclarez le serveur dans votre fichier .settings de Maven en ajoutant la rubrique suivante :

<server>    <id>bintray-{user_name}-maven-{package_name}</id>    <username>{user_name}</username>    <password>{api_key}</password></server> 

l'api_key est disponible en consultant votre  profil.



  • Je vous passe la config proprement liée à l'utilisation du plugin release de maven.
  • Ajouter la référence à votre nouveau repo de déploiement dans le pom.xml
<distributionManagement>
<repository>
<id>bintray-{user_name}-maven-{package_name}</id>
<name>{user_name}-maven-{package_name}</name>
<url>https://api.bintray.com/maven/{user_name}/maven/{package_name}</url>
</repository>
</distributionManagement>

  • Et voilà, that's all. Dès le déploiement de votre artefact vous pourrez le voir apparaitre sur votre espace.

Comment déclarer la dépendance vers votre artefact au sein d'un projet ?


  • Une fois déployé, votre artefact sera disponible en ajoutant la déclaration du repository dans le pom xml.

<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>bintray</name>
<url>http://dl.bintray.com/{user_name}/maven</url>
</repository>
</repositories>


Et Maven Central là-dedans ?

J'aime bien le début de ce post sur le blog de Bintray : Que cela signifie-t'il quand un outil ou un framework dispose de dizaines de guides ? Probablement qu'il soit populaire, ou qu'il soit compliqué à utiliser. Souvent les deux. C'est le cas de Maven Central

Pour ceux qui ont essayé, déployer sur Maven Central n'est pas vraiment la chose la plus aisée qui soit.

Bintray vous permet de lier votre package à JCenter. Une fois lié, vous n'aurez plus qu'à lancer une synchronisation et le tour sera joué !

Parce qu'il est dommage de paraphraser un article, je préfère vous rediriger vers ce post qui décrit parfaitement comment configurer cette synchronisation pas à pas.