POM mutant sous m2eclipse – la méthode recommandée

Last Updated on Mardi, 30 mars 2010 04:48 Written by Henri Gomez Mardi, 30 mars 2010 04:48

Dans un billet précédent j’avais donné une méthode permettant de définir un profil maven lorsqu’on était sous Eclipse.
Ceci permettait d’avoir des comportements de construction différents suivant qu’on était sous Eclipse ou en ligne de commande (par exemple sous Hudson).

Généralement on cherche surtout à définir un profil lorsqu’on est sous m2eclipse.

Il est donc recommandé d’utiliser la variable m2e.version, exporté par m2eclipse plutôt que la variable osgi.bundles.defaultStartLevel définit elle par l’environnement OSGI d’Eclipse.

La nouvelle version du POM d’exemple devient donc :

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>org.mycorp.am</groupId>
  <artifactId>mycorp-am-war</artifactId>
  <name>mycorp-am-war</name>
  <version>1.0.0</version>
  <packaging>war</packaging>
  <description>war AM</description>

  <profiles>

    <profile>
      <id>standard-maven</id>
      <activation>
        <property>
          <name>!m2e.version</name>
        </property>
        <activeByDefault>false</activeByDefault>
      </activation>

      <build>

        <plugins>

          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jspc-maven-plugin</artifactId>
            <version>1.4.6</version>
          </plugin>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1-alpha-2</version>
          </plugin>

        </plugins>

      </build>

    </profile>

    <profile>
      <id>m2eclipse-embedded</id>
      <activation>
        <property>
          <name>m2e.version</name>
        </property>
      </activation>

      <build>

        <plugins>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1-alpha-2</version>
          </plugin>

        </plugins>

      </build>

    </profile>

 </profiles>

</project>
Learn More

m2eclipse 0.9.9-dev et relocation

Last Updated on Vendredi, 30 avril 2010 01:19 Written by Henri Gomez Jeudi, 9 juillet 2009 05:06

La dernière version du plugin Eclipse, m2eclipse, 0.9.9-dev, utilise comme support maven embarqué une version provenant du maven 3.0.

Bonne nouvelle car comme beaucoup j’attendais la résolution des problèmes rencontré avec l’ancien embedded et certains plugins jouant avec le tools.jar, comme le plugin jaxws.

Malheureusement, cette version de Maven Embedded ne permet pas de suivre les ‘relocation d’artifact’, comme l’indique le bug levé par Olivier Lamy.

Si ce n’est pas un problème insurmontable pour les dépendances dans vos projets, puisque vous pouvez soit utiliser le bon artifact, ex javax.activation:activation, ou exclure un artifact:

<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.1</version>

<!-- Maven 3.0 / m2eclipse 0.9.8+ didn't support relocation for now -->
<exclusions>
<exclusion>
<groupId>activation</groupId>
<artifactId>activation</artifactId>
</exclusion>
</exclusions>

</dependency>

<!-- required now by javax.xml.ws -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1</version>
</dependency>

C’est beaucoup plus gênant dès lors qu’on se trouve avec une dépendance définie dans un plugin maven, comme notre ami org.codehaus.mojo:jaxws-maven-plugin.

Dans ce cas point de salut, si ce n’est attendre une correction du plugin ou l’ajout du support de la relocation dans maven 3.0 puis l’utilisation de cette corrective dans une future m2eclipse.

En attendant, la solution de contournement trouvée, pas très propre je le reconnais, a été de copier le jar activation-1.0.2.jar dans mon repository local maven sous activation/activation/1.0.2/

activation-hack

Learn More

POM mutant pour m2eclipse

Last Updated on Lundi, 16 mars 2009 04:39 Written by Henri Gomez Lundi, 16 mars 2009 04:39

Même si le support m2eclipse est excellent dans la dernière version 0.9.7, on rencontre encore pas mal de problèmes de compatibilité.

Dernièrement j’ai eu à batailler avec le plugin JSPC qui ne fonctionne pas sous m2eclipse :

javax.xml.parsers.FactoryConfigurationError: Provider
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found
at javax.xml.parsers.DocumentBuilderFactory.newInstance(DocumentBuilderFactory.java:129)
at org.apache.jasper.xmlparser.ParserUtils.parseXMLDocument(ParserUtils.java:88)
at org.apache.jasper.compiler.TldLocationsCache.processWebDotXml(TldLocationsCache.java:302)
at org.apache.jasper.compiler.TldLocationsCache.init(TldLocationsCache.java:248)
at org.apache.jasper.compiler.TldLocationsCache.getLocation(TldLocationsCache.java:224)
at org.apache.jasper.JspCompilationContext.getTldLocation(JspCompilationContext.java:526)
at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:422)
at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:492)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1552)
at org.apache.jasper.compiler.Parser.parse(Parser.java:126)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:211)

Bref, il devenait temps d’avoir des pom dans nos projets qui détectent le mode embedded de m2eclipse afin de désactiver certaines phases.

Pour ce faire, il suffit d’avoir recours aux profiles et d’activer un profil particulier.
Il suffit de retenir une propriété JVM présente en mode eclipse, comme par exemple osgi.bundles.defaultStartLevel.

Un exemple plus bas, qui montre un défini un profile maven standard lorsque la propriété osgi.bundles.defaultStartLevel n’est pas trouvée dans l’environnement JVM (à noter le ! devant la propriété (merci Remy) et un autre lorsqu’elle est trouvée.

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>org.mycorp.am</groupId>
  <artifactId>mycorp-am-war</artifactId>
  <name>mycorp-am-war</name>
  <version>1.0.0</version>
  <packaging>war</packaging>
  <description>war AM</description>

  <profiles>

    <profile>
      <id>standard-maven</id>
      <activation>
        <property>
          <name>!osgi.bundles.defaultStartLevel</name>
        </property>
        <activeByDefault>false</activeByDefault>
      </activation>

      <build>

        <plugins>

          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jspc-maven-plugin</artifactId>
            <version>1.4.6</version>
          </plugin>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1-alpha-2</version>
          </plugin>

        </plugins>

      </build>

    </profile>

    <profile>
      <id>m2eclipse-embedded</id>
      <activation>
        <property>
          <name>osgi.bundles.defaultStartLevel</name>
        </property>
      </activation>

      <build>

        <plugins>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1-alpha-2</version>
          </plugin>

        </plugins>

      </build>

    </profile>

 </profiles>

</project>
Learn More
Designed by RocketTheme
WordPress is Free Software released under the GNU/GPL License.