Tags

, , ,

Il y a de cela un peu plus d’un an, lorsque je cherchais un moyen de construire un plugin Eclipse avec Maven, je tombais presque par hasard sur une réponse laconique de Jason Van Zyl (le papa de maven): “Tycho”.
Mais, me diriez-vous : On ne pouvait pas contruire de plugin Eclipse avec Maven avant ???

Eh bien, en pratique, on pouvait parvenir à compiler des sources, à générer des fichiers manifest.mf voire à construire des “product” mais à quel prix ! A titre d’illustration, je vous invite à lire l’excellent article de Cyril Lakech et vous aurez une mince idée de la sueur et des larmes qu’il fallait accepter de verser pour mettre en place Maven sur des plugins avant d’apercevoir le graal.

Une autre alternative consistait à développer et maintenir ses propres “Mojo”; Grégory Levilain a ces dernières années ainsi développé et déployé sur de nombreux projets un ensemble de plugins Maven permettant d’adopter une optique “POM-FIRST”. Cette approche laisse à Maven le soin de gérer les versions des éléments du projet (plugins, fragments, features, update-sites, products), et de leurs dépendances. Ces travaux ont été initiés en 2006 lors de la mise en open-source du projet Wazaabi.

Mais alors que fournit Tycho de si merveilleux ?

Tout d’abord, Tycho fournit un mécanisme de résolution de dépendances s’appuyant sur le fichier MANIFEST.MF du plugin. Cela présente un double intérêt :

  • Les bundles OSGi (dont les plugins Eclipse font partie) disposent d’un mécanisme de résolution de dépendances plus abouti que celui fourni par maven (dépendances non-transitives, possibilité de préserver tout ou partie des paquetages d’un bundle,…).
  • De cette façon, le développeur n’a pas à se préoccuper de l’utilisation de Maven : il peut se concentrer sur le manifest.mf comme il est censé le faire normalement dans le PDE sans se soucier du pom.xml.
  • Par ailleurs, le PDE résout les dépendances incroyablement plus rapidement que ne le feraient q4e ou m2e en s’appuyant sur les informations du pom.xml.

Au final, un pom.xml minimal permettant de construire un plugin Eclipse se réduit pratiquement toujours à :


	4.0.0
	
		com.mycompany.mygroup
		parent
		0.0.1-SNAPSHOT
	
	com.mycompany.myplugin
	eclipse-plugin

Frugal n’est ce pas ?
Bien entendu, nous allons mettre des choses un peu plus intéressantes dans le pom.xml parent.

Le PDE et la notion de target platform

Avant d’aller plus loin, il est temps à présent de fournir un petit rappel concernant la façon d’utiliser le PDE (Plugin Development Environment). Par défaut, lorsque vous développez des plugins sous Eclipse vous utilisez la “target platform” courante. C’est à dire l’ensemble des plugins qui vous ont permis de démarrer votre IDE. C’est une très bonne pratique que de définir sa propre target platform:

  • Cela permet de travailler éventuellement sur une version différente des plugins Eclipse.
  • Cela permet de travailler sur un sous-ensemble des plugins (quelques dizaines suffisent la plupart du temps).
  • Cela permet d’ajouter vos propres plugins déjà construits sans polluer votre IDE.

Vous trouverez l’ensemble des target platform sous Eclipse dans “Windows–> preferences ->Plug-in Development -> Target Platform”

En somme, la target platform fournit les mêmes fonctionnalités qu’un repository Maven.

Il est donc tout à fait naturel de retrouver cette notion dans la résolution de dépendances de builds Tycho. Tycho propose actuellement 2 façons de résoudre la target platform utilisée pour ses builds.

  1. Par le biais du filesystem
  2. mvn clean install -Dtycho.targetPlatform=<c:/eclipse3.5>

  3. De façon beaucoup plus élégante, par le biais de repository P2 et maven combiné
  4. 
    	4.0.0
    	org.dynaresume
    	parent
    	0.0.1-SNAPSHOT
    	pom
    	
    		infrastructure
    		bundles-api
    		bundles-impl
    		bundles-ui
    	
    	
    		
    			
    				org.sonatype.tycho
    				tycho-maven-plugin
    				0.6.0
    				true
    			
    			
    				org.sonatype.tycho
    				target-platform-configuration
    				0.6.0
    				
    					p2
    					consider
    				
    			
    		
    	
    
    	
    		
    			gallileo
    			p2
    			http://download.eclipse.org/releases/galileo
    		
    		
    			com.springsource.repository.bundles.release
    			SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases
    			http://repository.springsource.com/maven/bundles/release
    		
    
    		
    			com.springsource.repository.bundles.external
    			SpringSource Enterprise Bundle Repository - External Bundle
    				Releases
    			http://repository.springsource.com/maven/bundles/external
    		
              
    
    

Conclusion

Cela laisse présager des jours heureux pour tous les développeurs RCP. A titre individuel, je commence fortement à songer à l’utilisation de Tycho pour construire et assembler en headless non seulement des plugins RCP mais aussi tous les bundles OSGi qui se présentent.

Mais alors, vous allez me dire pourquoi n’ai je pas utilisé Tycho plus tôt ?

Principalement parce que Tycho ne fonctionne qu’avec Maven 3 dont les pseudo release alpha-x sont à peine sorties. Toutefois, rassurez vous, vos pom.xml actuels sont censés être parfaitement portables vers Maven 3. Des centaines de tests unitaires sont utilisés pour vérifier cela et actuellement il ne semble pas y avoir de défection.

Il subsiste un point sur lequel Tycho n’apporte pas à ce jour de réponse satisfaisante à ceux qui sont habitués aux cycles de développements fournis par Maven : la synchronisation pom.xml/manifest.mf lors de la phase de release. Ceci est en passe d’être corrigé dans la version 0.7.0.

Pour aller plus loin :

Advertisements