Bundelisation d'un jar existant
Last Updated on Mardi, 17 février 2009 06:25 Written by Henri Gomez Mardi, 17 février 2009 06:25
Je cherchais depuis quelques temps une méthode simple pour bundleiser certains de nos artifact maven en bundle osgi.
Le problème ne se pose pas pour les projets sur lesquels nous avons les sources en insérant le plugin dans le cycle existant via :
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
</plugin>
Cependant dès qu’on utilise des artifacts externes et sans sources, comme les jars jt400 ou mqseries, on a plusieurs possibilités
Inserer le MANIFEST dans un jar existant, délicat opération manuelle.
Utiliser eclipse pour refaire un plugin depuis un jar existant. Simple mais ne peut être industrialisé.
Utiliser le plugin maven-bundle-plugin.
C’est cette troisième voie que j’ai utilisé et de manière très simple :
- on définit un projet bundle
- on ajoute la dépendance à l’artifact que l’on souhaite bundliser
- on utilise maven-bundle-plugin avec Embed-Dependency en précisant inline=true
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycorp</groupId> <artifactId>net.sf.jt400</artifactId> <packaging>bundle</packaging> <name>net.sf.jt400</name> <version>6.4.0</version> <description>Bundle OSGI de JT400</description> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <export-Package>com.ibm.as400.*</export-Package> <embed-Dependency>com.ibm.as400.*;scope=compile;inline=true</embed-Dependency> </instructions> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>net.sf.jt400</groupId> <artifactId>jt400-full</artifactId> <version>6.4</version> <scope>compile</scope> </dependency> </dependencies> </project>Learn More
Maven 2.0.10
Last Updated on Mardi, 17 février 2009 03:35 Written by Henri Gomez Mardi, 17 février 2009 03:35
La version 2.0.10 de Maven n’est pas encore officiellement disponible mais le vote sur sa stabilité a été lancé le 10 Février.
Les binaires ‘temporaires’ sont disponibles ici
Je les utilise depuis une bonne semaine sur l’ensemble des projets de la boutique et aucun problème rencontré jusque là
jaxws maven plugin 1.11 – Enfin !
Last Updated on Lundi, 29 décembre 2008 04:37 Written by Henri Gomez Lundi, 29 décembre 2008 04:37
Il y a quelques temps déjà, j’avais levé un problème avec le mojo jaxws-maven 1.10 qui nous empêchait d’utiliser les JVM IBM pour construire des projets nécessitant wsgen.
Dans la version 1.10, un bug pernicieux a été introduit en voulant gérer le cas Mac OS/X:
<profiles>
<profile>
<!-- This is only for non MAC OS X builds, hence the property below -->
<id>default-tools.jar</id>
<activation>
<property>
<name>java.vendor</name>
<value>Sun Microsystems Inc.</value>
</property>
</activation>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.5.0</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</profile>
</profiles>
L’idée c’était de dire, si le fournisseur de la JVM est Sun Microsystems Inc, on ajoute le tools.jar à la liste des dépendances, sinon on reste avec le classpath de la JVM (qui dans le cas Mac/OS X doit déjà contenir tools.jar).
Problème une JVM IBM sous Windows, le java.vendor c’est IBM Corporation et du coup on n’avait pas le tools.jar ajouté au classpath maven ;(
Ceci est corrigé dans la version 1.11 du plugin qui utilise un profile plus simple :
<profiles>
<profile>
<!-- This is only for non MAC OS X builds, hence the property below -->
<id>default-tools.jar</id>
<activation>
<file>
<exists>${java.home}/../lib/tools.jar</exists>
</file>
</activation>
<dependencies>
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.5.0</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</profile>
</profiles>
Autrement dit, si on trouve tools.jar dans le répertoire lib, on l’utilise, c’est simple et efficace et suit la recommandation faite sur la liste de dev
A noter, ceci ne fonctionne qu’à partir de Maven 2.0.9.
Il reste toujours impossible d’utiliser le plugin jaxws avec maven 2.1 (utilisé notamment dans m2eclipse).
Pour le futur Maven 3.0, c’est corrigé depuis la release alpha2 !
Il ne reste donc plus aux utilisateurs d’ m2eclipse qu’à s’armer de patience.
Learn More