"
Je t’explique:
- lorsque tu tapes « IndexOutOfBoundsException » dans Google afin de retrouver rapidement la documentation de cette classe Java, historiquement nous tombions sur l’URL suivante :
Yet another Java blog, comme on dit
Quoi qu'il en soit, et si vous n'avez pas encore eu le livre entre les mains, jetez un oeil sur le magazine chez votre marchand de journaux préféré pour vous faire une idée du ton que nous lui avons donné. Il ne vous en coutera que 3€ si vous voulez le lire tranquillement chez vous, 3€ qui ne vous seront absolument pas remboursés si au final vous achetez le livre, faut pas rêver non plus :P
<profile>
<id>dev</id>
<build>
<resources>
<resource>
<directory>${basedir}/src/env/dev</directory>
</resource>
</resources>
</build>
</profile>
<profile>
<id>prod</id>
<build>
<resources>
<resource>
<directory>${basedir}/src/env/prod</directory>
</resource>
</resources>
</build>
</profile>
<env-entry>
<description>Chemin de la configuration locale</description>
<env-entry-name>appli.home</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>/valeur/par/defaut</env-entry-value>
</env-entry>
Double d = ...; truc.setValue( d ); // signature : public void setValue( double );
Double d = ...; truc.setValue( d.doubleValue() );
public class Sample
{
/**
* Moi y'en a faire du JavaDoc pour le fun qu'il décrit rien de
* qu'est ce que dont ça fait la chose dessous là
*/
@tesSouhaits( value = "t'as avalé un becherel de travers ?",
reviewer = "jtoubon" )
public void codeDeMerde()
{
@ttention( "il y a plus simple pour créer des double..." )
double d = new Double( "1.0" ).doubleValue();
@bracadabra( "fun, mais ça sert à quoi exactement ?" )
double k = ( d + 2 - 2 );
}
}

@EntityPour un projet utilisant le JDK6 pour compiler, et sans rien faire sauf ajouter Fonzie-0.4-SNAPSHOT en dépendance, le fichier .class décompilé donne ceci :
public class User
{
public native void persist();
}
@EntityPour ce premier jet, le code introduit dans la méthode n'est pas passionnant, mais au moins le squelette est en place. Reste à construire via l'AST le code d'invocation Fonzie qui va bien -- et ça, ça va être tout de suite plus toochy.
public class User
{
public void persist()
{
Fonzie.instance();
}
}
Après avoir pesté toute la journée d’hier sur Eclipse, je viens de penser à une piste pour résoudre mon problème :
J’ai utilisé dans mon POM le pseudo-plugin org.maven.ide.eclipse::lifecycle-mapping que proposait m2eclipse 0.9.9 pour activer la compilation incrémentale. En conservant ce plugin activé, m2eclipse 0.10 ne prend plus en charge la configuration d’Eclipse et je me retrouve donc avec mes soucis de WTP pas configuré et de target/generated-sources absents.
En virant ce plugin, m2eclipse 0.10 retrouve son mode nominal et la configuration se passe donc “comme dans le manuel”.
mea culpa donc, je suis un bête gars qui a essayé les pré-version et a cru que la compatibilité serait au rendez-vous, mais quel boulet celui-là.
J’ai tout de même posté sur le sujet sur user@m2eclipse.codehaus.org, en espérant que ça puisse servir à d’autres.
L’actu Maven du mois de février est chargé :
Le plugin Maven-Release passe (enfin) en 2.0, vous pouvez donc profiter d’un mécanisme très complet et bien ficelé de gestion des releases sans reposer sur un statut “beta”, ce qui pouvait en effrayer quelques-un.
fini les m2eclipse-0.9.9-dev, avec la sortie officielle de m2e 0.10.0
Non ce n’est pas un erreur, il ne s’agit pas d’une 1.0.0 de m2eclipse, celle qui aurait annoncé enfin l’intégration efficace de Maven dans Eclipse. C’est plutôt une milestone de ce que sera cette intégration .. un jour.
Sans compter que Sonatype a choisi de mettre de côté l’intégration SVN, WTP ou AJDT faute de ressources pour les supporter efficacement, et préfère ce concentrer sur le noyau. Si le principe semble assez logique (on ne peut pas courir plusieurs lièvres à la fois) les utilisateurs vont vite être déçus de voir qu’il ont attendu 8 mois (la précédente version stable 0.9.8) pour ne toujours pas avoir un résultat complètement fonctionnel.
Pour ma part, la configuration de WTP ne marche tout simplement pas, alors qu’elle fonctionnait avec une 0.9.9 récente (?). Aux questions sur ce sujet la réponse est systématiquement, “nos efforts se concentrent sur le code, on verra le reste après”.
Je ne leur jetterais pas la pierre, car en tant que mainteneur de l’intégration m2eclipse / eclipse-checkstyle je me rend compte que le développement de plugin Eclispe est un art délicat et que j’y suis bien malhabile. Reste qu’on a pas fini de se plaindre de la piètre intégration du couple Eclipse + Maven comme environnement de développement. Wait & See, encore et toujours…
Julien Dubois a lancé le débat sur son blog en présentant ses astuces pour un build plus réactif. Entre autres idées, il utilise un disque SSD pour espace de travail.
Je ne suis pas du tout convaincu par cette option, vu que ce type de disque n’est pas très tolérant aux écritures multiples. Je pense que, si les perfs peuvent être meilleures sur le coup, la durée de vie de la bête risque d’en prendre un coup.
Une autre option que je suis en train d’expérimenter, suite à la même analyse venant de Julien -- l’autre Julien, celui du BreizhJug ;)
Comme mon PC est sous Windows XP 32bits je ne peux pas profiter à 100% de mes deux barettes de RAM de 2Go. Windows ne voit que 3Go adressables. Même le mode “PAE” n’y a rien changé. Cependant, il existe des RamDisk comme Gavotte RAMdisk qui savent contourner ce problème et récupérer cet espace perdu. Un RamDisk de 1Go, bien assez pour mettre mon workspace.
mvn clean install -Dmaven.test.skip=true
sur le HD “classique” :
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 48 seconds
sur le RamDisk :
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30 seconds
Reste à voir ce que ça donne sous Eclipse …
Autres pistes à creuser :
Update (pour ceux qui ont la flemme de lire les commentaires)
Placer le workspace en ramdisk booste un peu les perfs, mais pas autant que de placer le repository Maven ! Il faut dire que nos outils passent leur temps à charger des libs en tout genre. En plus, c’est un moyen simple pour faire du ménage dans le repo – à condition d’avoir un repo manager qui fournit les artefacts via le réseau local :)
Ca pourrait être pas mal non plus de mettre l’OS en ramdisk :p
J’utilise Oracle eXpress pour les développement. Dans l’esprit “une base par développeur”, cette édition allégée (faut le dire vite) d’Oracle est bien pratique. Le dialecte SQL propre à la base est ainsi testé en phase de développement.
Pour l’intégration continue, j’installe la base sur un système Ubuntu dans une VM, et c’est là que ça se complique … oracleXE n’étant dispo qu’en version 32 bits dans le dépot debian d’oss.Oracle.com
Voici donc pour info la procédure à suivre :
1- installer Ubuntu server 64 (sans blague ?)
2- ajouter le paquet open-ssh. La console VMWare est pas terrible, alors qu’un putty permet de faire des copier/coller à la souris ;) -- se loguer en ssh pour la suite
3- ajouter les paquet bc et libc6-i386
$ sudo apt-get install bc libc6-i386
4- créer un gros swap, nécessaire pour OracleXE
$ sudo dd if=/dev/zero of=/swpfs1 bs=1M count=1000
$ sudo mkswap /swpfs1
$ sudo swapon /swpfs1
5- télécharger les binaires d’oracleXE et de sa dépendance libaio en version i386
$wget -c http://oss.oracle.com/debian/dists/unstable/main/binary-i386/libaio_0.3.104-1_i386.deb http://oss.oracle.com/debian/dists/unstable/non-free/binary-i386/oracle-xe-universal_10.2.0.1-1.1_i386.deb
6- installer tout ça, en demandant à Ubuntu de ne pas tenir compte du conflit d’architecture 64/x86
$ sudo dpkg -i --force-architecture libaio_0.3.104-1_i386.deb
$ sudo dpkg -i --force-architecture oracle-xe-universal_10.2.0.1-1.1_i386.deb
7- configurer OracleXE. Je vous déconseille de changer la conf par défaut, chez moi le choix d’un port autre que 8080 fait que l’appli d’admin Oracle est injoignable. On changera ça après coup
$ sudo /etc/init.d/oracle-xe configure
8- un petit vi pour mettre à jour votre ~/.bashrc
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOME
export ORACLE_SID=XE
9- on va maintenant changer la conf de l’appli d’admin d’OracleXE, sans quoi on ne peut pas y accéder – seul localhost est autorisé, et sur notre ubuntu server, y’a pas de navigateur puisque y’a pas d’environnement graphique ! sqlplus est dispo sous /usr/lib/oracle/…./server/bin
$ sqlplus /nolog
CONNECT SYS/password AS SYSDBA
EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
EXEC DBMS_XDB.SETHTTPPORT(‘8081’);
et voilà ! :)