Pascalleclercq's Blog

13/05/2010

Customisation des plugins « Tycho »

Filed under: Eclipse RCP,Maven,OSGi,Tycho — pascalleclercq @ 9:56

Récemment Keukeul m »interrogeait sur la documentation des plugins « Tycho » (https://pascalleclercq.wordpress.com/2010/02/14/construire-ses-plugins-eclipse-rcp-avec-maven-c%e2%80%99est-plus-facile-maintenant-avec-maven-3-et-tycho/#comment-9).

Rappelons que Tycho peut être défini comme un ensemble de plugins maven destiné à la construction de livrables eclipse. La question posée par Keukeul est pour le moins légitime et pertinente !

Malheureusement, à ce jour, je ne connais pas d’article de référence concernant la configuration de ces plugins. La seule vraie solution aujourd’hui est de récupérer les exemples disponibles avec les sources de Tycho. (http://github.com/sonatype/sonatype-tycho/tree/master/tycho-its/projects/)

Je vais donc, à la demande générale exposer les différentes configuration des plugins Tycho que j’ai eu l’occasion d’utiliser en tentant d’expliquer le pourquoi.

1. tycho-maven-plugin

La présence de ce plugin est indispensable pour que maven sache interpréter les packaging Tycho (http://tycho.sonatype.org/packagingtypes.html). Un bloc de ce type est donc indispensable :

<build>
<plugin>
   <groupId>org.sonatype.tycho</groupId>
   <artifactId>tycho-maven-plugin</artifactId>
   <version>0.8.0</version>
   <extensions>true</extensions>
</plugin>
...
</build>

Je n’ai pas grand chose à dire de plus mis à part que ce bloc est indispensable pour que Tycho puisse fonctionner. Ce bloc est bien entendu à placer dans votre pom.xml « parent ».

2. maven-osgi-compiler-plugin

Ce plugin est ni plus ni moins l’équivalent du fameux « maven-compiler-plugin ». Il me sert à configurer l’équivalent du « -source » et « -target » du compilateur java.

<build>
     <plugins>
       <plugin>
         <groupId>org.sonatype.tycho</groupId>
         <artifactId>maven-osgi-compiler-plugin</artifactId>
         <version>0.8.0</version>
         <configuration>
           <source>1.6</source>
           <target>1.6</target>
         </configuration>
       
       </plugin>
     </plugins>
 </build>

Je n’ai pas testé autre chose sur ce plugin mais je pense qu’on peux raisonnablement espérer que l’essentiel voire la totalité des options du classique maven-compiler-plugin fonctionne (http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html)

3. target-platform-configuration

A mes yeux le plugin le plus utile à connaître. En effet, tycho fonctionne par défaut avec un repository de type « file system » à plat que l’on passe en argument du build -Dtycho.targetPlatform=c:/eclipse.

Ce que l’on veut, c’est que Tycho puisse exploiter des repository à la maven voire mieux à la p2 (tant qu’à faire de l’eclipse…). Eh bien Tycho peut faire les 2 !!!!

Comment simplement en ajoutant dans votre pom.xml ce bloc :

<build>
		<plugins>
		...
			<plugin>
				<groupId>org.sonatype.tycho</groupId>
				<artifactId>target-platform-configuration</artifactId>
				<version>0.8.0</version>
				<configuration>
					<resolver>p2</resolver>
					<pomDependencies>consider</pomDependencies>
				</configuration>
			</plugin>
		</plugins>
</build>

<repositories>
		<repository>
			<id>gallileo</id>
			<layout>p2</layout>
			<url>http://download.eclipse.org/releases/galileo</url>
		</repository>

...
</repositories>

Explications :
– la balise p2 permet de dire à maven de prendre en considération lors du build les dépendances trouvées dans le dépôt p2 positionné quelques lignes plus bas sous la balise « repositories ».
– la balise consider permet d’exploiter en même temps des dépendances provenant de repository au layout maven (c’est le cas de Spring DM par exemple). Il va sans dire que ces dépendances doivent être des bundles OSGi pour être exploitables lors du build. Si vous n’avez pas besoin de dépendance provenant d’un dépôt maven cette balise ne vous sera pas utile.

4. maven-osgi-packaging-plugin

Ce packaging est utile pour la construction de « product » (= d’exécutables) eclipse. Pour rappel, pour contruire un « product » avec Tycho vous devez créer un projet séparé ne contenant u’un fichier « .product » et dont le pom.xml possède le packaging « eclipse-application ».

<plugin>
                <groupId>org.codehaus.tycho</groupId>
                <artifactId>maven-osgi-packaging-plugin</artifactId>
                <version>0.8.0</version>
                <configuration>
                <productConfigurationFile>toto.product</productConfigurationFile>
                    <environments>
                        <environment>
                            <os>linux</os>
                            <ws>gtk</ws>
                            <arch>x86</arch>
                        </environment>
                        <environment>
                            <os>win32</os>
                            <ws>win32</ws>
                            <arch>x86</arch>
                        </environment>
                        </environments>
                </configuration>
</plugin>

Remarque : Une best practice consiste à « variabiliser » le numéro de version de Tycho (0.8.0 ici) dans un propriété du pom.xml.

Un exemple de contruction d’un projet mutimodule avec tycho : http://code.google.com/p/dynaresume/source/checkout

7 commentaires »

  1. Pascal

    Merci beaucoup pour ce billet.

    Cependant je reste sur ma faim😉 et notamment pour le plugin target-platform-configuration.

    Comment pourrais-tu exprimer -Dtycho.targetPlatform=c:/eclipse que tu passes en argument de Maven directement dans la configuration du plugin ? Je ne suis pas fana des paramètres passés en ligne de commande. Je suis plus pour l’utilisation de profile.

    Par ailleurs, connais-tu d’autres valeurs pour la balise pomDependencies ?

    J’ai commencé à regarder les sources mais ce genre d’informations est difficile à trouver. Je pense poster un message sur le forum de Tycho pour éclaircir tous ces points.

    Encore merci Pascal

    Mickael

    Commentaire par BARON Mickael — 14/05/2010 @ 9:12 | Répondre

  2. Bonjour Pascal ! et merci pour ce billet !
    Dans ta derniere etape, tu configures maven-osgi-packaging-plugin pour pouvoir obtenir un produit executable.
    Chez moi, bien que mon plugin se construise sans encombres, mon produit ne se construit pas :
    INFO] Cannot complete the request. Generating details.
    {osgi.ws=gtk, org.osgi.framework.executionenvironment=OSGi/Minimum-1.0,OSGi/Minimum-1.1, org.eclipse.update.install.features=true, osgi.os=linux, osgi.arch=x86_64, org.osgi.framework.system.packages=}
    [Software being installed: twitosgi_product 1.0.0, Missing requirement: twitosgi_product 1.0.0 requires ‘org.eclipse.equinox.executable.feature.group 0.0.0’ but it could not be found]
    [ERROR] Internal error: java.lang.RuntimeException: org.eclipse.equinox.internal.provisional.p2.core.ProvisionException: Problems resolving provisioning plan. -> [Help 1]

    La feature manquante est org.eclipse.equinox.executable.feature.group , presente dans le delta pack.
    Comment as tu fait pour referencer le delta pack dans ton projet ? p2 repo ? file system ? si oui, comment ?
    Merci d’avance, et bonne continuation !
    Anthony

    Commentaire par Anthony Dahanne — 02/06/2010 @ 12:55 | Répondre

    • Bonjour Anthony et Merci pour tes encouragements,

      actuellement, je ne génére pas le repo p2 pour constuire mes projets « product » (maven-osgi-packaging-plugin). J’utilise une Tycho version 0.5.0 où la target platform est principalement fournie en filesystem avec des dépendances non transitives sous une balise « dependencyManagement ».

      Si j’en crois la mailing list Tycho, on t’a déjà répondu et j’avoue qu’il s’agit pour moi d’une découverte que j’aimerai essayer ASAP.

      @ bientôt
      Pascal

      Commentaire par pascalleclercq — 02/06/2010 @ 9:43 | Répondre

  3. Bonjour Pascal !
    Si je comprends bien, tu utilisais tycho 0.5 compilé avec le delta pack en target platform ? Moi j ‘utilise maven 3.0 beta1, et le tycho plugin a été récupéré en dependances maven.
    Effectivement, j’ai aussi posé la question sur tycho users mailing list :
    http://software.2206966.n2.nabble.com/maven-osgi-packaging-plugin-requires-org-eclipse-equinox-executable-feature-group-0-0-0-but-it-couldd-td5130588.html#a5130588
    et le coup du p2 repo pour le delta pack a partiellement marché (marche que mon environnement)
    mais cette fois ci je suis coincé car il me manque le eclipse.ini, qui n a pas été généré…
    à suivre !

    Commentaire par Anthony Dahanne — 03/06/2010 @ 12:41 | Répondre

  4. Bonjour,

    d’abord merci pour cette suite d’article sur Tycho!

    J’ai une question qui sera peut-être abordée par la suite :
    Si mon product ou mon plugin a des dépendance sur un plugin externe non fournit par Eclipse, je butte sur les dépendances…

    Par exemple si je veux utiliser le plugin org.eclipse.nebula.widgets.datechooser je peux downloader ce plugin mais je ne trouve pas le moyen de le mettre dans mon repo pour qu’il soit visible au niveau dépendances…

    J’ai essayé les solutions du style mvn install:install-file -Dfile=….. -Dpackaging=jar -DgeneratePom=true mais ça ne marche pas…
    Je subodore qu’il faille le mettre dans un repo p2 mais je ne vois pas non plus…

    Merci pour votre avis!

    Amicalement,

    Guillaume

    Commentaire par Guillaume Helle — 26/05/2011 @ 2:58 | Répondre

    • Bonjour et merci de ton soutiens !!!

      Je pense que la meilleure manière de résoudre ton problème est d’utilisiser :

      consider

      au niveau de la configuration du plugin « target-platform-configuration » cf. http://code.google.com/p/dynaresume/source/browse/trunk/pom.xml.

      Ensuite tu peux ajouter ton module absent de tout repo p2 en tant que dépendance maven « classique ».

      Il existe néanmoins des limitations : cette dépendance n’est pas transitive (ce qui est rarement un problème en RCP).

      Personnellement, j’ajoute ces dépendances au niveau du pom.xml « aggregator » : En effet, les jars déclarés « augmentent » la target platform. Les « vrais » dépendances étant toujours présentes au niveau des fichiers « manifest.mf ».

      Dans le fichier : http://code.google.com/p/dynaresume/source/browse/trunk/pom.xml., tu trouveras un exemple complet de configuration de ce type.

      Amicalement.

      Pascal Leclercq

      Commentaire par pascalleclercq — 16/06/2011 @ 9:01 | Répondre


RSS feed for comments on this post. TrackBack URI

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Propulsé par WordPress.com.

%d blogueurs aiment cette page :