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.
Partager