IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Maven Java Discussion :

(Gag?) Mon POM est trois fois plus long que mon build.xml d'Ant. Comment y remédier?


Sujet :

Maven Java

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut (Gag?) Mon POM est trois fois plus long que mon build.xml d'Ant. Comment y remédier?
    J'ai du prendre Maven 2 dans le mauvais sens.

    Pour compiler une série de projets, j'ai souhaité remplacer leur build.xml d'ANT par des fichiers pom. Je me rends compte que si c'était simple dans les premiers jours, cela devient difficile.

    Mes sources ont des annotations. Pour pouvoir les créer, le jar tools.jar du JDK est requis à la compilation. Et pour pouvoir les utiliser, le préprocesseur APT du JDK est nécessaire.


    Problème 1: Compiler les annotations. Maven 2 ne connaît pas Java.
    Il ne sait pas qu'il existe un jar tools.jar dans ${JAVA_HOME}\lib\tools, et qu'il en a besoin.

    => Ecriture d'un premier bloc de texte:

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
       <profiles>
          <profile>
             <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.6.0</version>
                   <scope>system</scope>
                   <systemPath>${java.home}/../lib/tools.jar</systemPath>
                </dependency>
             </dependencies>
          </profile>
       </profiles>


    Problème 2: Utiliser les annotations. Maven 2 ne sait pas déclencher Annotation Processing Tools (APT) facilement. D'abord, il ne sait même pas ce que c'est.

    - Il faut aller chercher un plugin, associé au projet tobago - myfaces d'Apache.
    C'est là, parce que... les annotations et (cette extension pour JSF ?) ont été rangées dans au même endroit. C'est intuitif.

    - Et nouvelle déblatération dans le fichier pom:

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
             <!-- Exécution d'APT -->
             <plugin>
                <groupId>org.apache.myfaces.tobago</groupId>
                <artifactId>maven-apt-plugin</artifactId>
     
               <executions>
                  <execution>
                     <phase>generate-sources</phase>
     
                     <configuration>
                        <generated>.apt_generated</generated>
                        <aptOptions>x=3</aptOptions>
                        <target>1.6</target>
                        <nocompile>true</nocompile>
                        <showWarnings>true</showWarnings>
                     </configuration>
     
                     <goals>
                        <goal>execute</goal>
                     </goals>
                  </execution>
               </executions>
            </plugin>

    Alors, ça me fait un fichier pom devenu trois fois plus grand que le fichier build.xml qu'il était sensé simplifier.
    Les cadavres (car les portions de texte que j'ai du y ajouter, je ne peux pas les appeler autrement), je vais devoir les transporter de pom en pom, pour tout projet qui voudra utiliser une annotation réclamant APT.

    ... sauf, si je fais erreur.
    C'est à dire: si aucun des deux blocs que j'ai ajoutés n'est nécessaire.

    1) Parce que Maven 2 sait retrouver tools.jar sans aide dans le JDK, mais je n'ai pas su l'écrire.

    2) Parce que Maven 2 sait lancer APT sans devoir lui placer une épitaphe, mais que je l'ai pas trouvé non plus.


    Mais je peux encore m'en sortir, s'il y a une autre solution que vous connaissez.
    Puis-je mettre ces deux pâtés dans un fichier commun, une déclaration quelconque qui existerait de manière définitive pour tous les projets que je vais employer? Un truc qui dise à Maven:
    - Mets toujours tools.jar en ligne quand tu compiles avec javac.
    - Utilises toujours APT.

    Sans devoir le copier dans tous les POM de tous les sous-projets ?

    Parce que dans la situation dans laquelle je me trouve, je suis entrain de faire la démonstration dans mon entreprise que si on utilise Maven 2 au lieu de ANT, ce sera plus long et plus difficile. Or, ça ne tombe pas immédiatement sous le sens.

    Il faut donc qu'il y ait un truc.
    Pouvez-vous m'éclairer?

    En vous remerçiant.

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Alors je ne sais pas trop pour cette histoire de tools.jar et de APT.

    Toutefois, voici une idée pour simplifier tout ce truc :

    Tu définis ce que tu nous a écrit pour tools.jar et APT dans un pom qui ne fait que ça (type de projet pom, c-a-d <packaging>pom</packaging>).

    Maintenant, tous tes projets hériteront de ce projet (via <parent>...</parent>) et tu n'auras pas besoin de répéter dans chaque pom ces informations là...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre habitué Avatar de DanielW33
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2006
    Messages : 327
    Points : 164
    Points
    164
    Par défaut
    Une piste pour ton tools.jar : ajoute la dependance ( avec un scope system pour pouvoir donner un chemin vers ta librairie avec systemPath ) lors de l'utilisation du plugin maven-compile-plugin (donc a repluger dans la partie build de ton pom.xml parent en utilisant la solution que propose romaintaz ).

    Tu peux meme creer une property dans ton settings avec le path vers ta librairie

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 36
    Points : 37
    Points
    37
    Par défaut
    bizarre, nous on a juste mis ça pour les annotations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <build>
    	<plugins>
    		<plugin>
    			<artifactId>maven-compiler-plugin</artifactId>
    			<configuration>
    				<source>1.5</source>
    				<target>1.5</target>
    			</configuration>
    		</plugin>
    	</plugins>
    </build>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/04/2012, 22h37
  2. Réponses: 5
    Dernier message: 05/04/2012, 12h03
  3. Réponses: 0
    Dernier message: 15/03/2012, 18h24
  4. Réponses: 9
    Dernier message: 09/10/2011, 20h16
  5. Réponses: 2
    Dernier message: 30/11/2008, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo