riduidel’s posterous

 
Filed under

maven

 

La meilleure façon de rater son projet grâce à Maven2

A chaque fois que je vois un développeur Java passer son temps à regarder Maven tourner, j’y vois une perte de productivité.
D’autant plus que je vois très régulièrement cette tendance dans les projets, au sein d’OCTO et même dans ma propre utilisation.
Attention, je pense que Maven est très efficace pour améliorer la productivité des développements, mais le plus gros piège reste de « passer son temps dans la console Â».

Pourquoi c’est mal ?
Quand on s’occupe de faire marcher Maven en bidouillant le POM et en regardant le build tourner dans la console : on ne développe pas.
Lorsqu’on développe, on doit passer son temps dans son IDE (eclipse, InteliJ, netbean, notepad ou vi selon les gouts) et coder du code, des tests.

maven is building

Cette image est un détournement, voici l’image originale : http://xkcd.com/303/

Alors pourquoi on passe son temps dans la console ?
En cherchant bien, j’en viens à la conclusion que la principale raison pour laquelle je passe mon temps dans la console est que mon IDE n’est pas bien configuré : un build dans mon IDE produit un résultat différent d’un build Maven, je ne fais plus confiance à mon IDE et la seule façon d’être sûr que mon code marche c’est de lancer la commande « mvn install Â» et d’attendre le message « Build Successfull Â». Un cas typique est l’utilisation du filtering des ressources par Maven qui n’est pas géré nativement par Eclipse (le plugin m2eclipse résout ce problème).

Oui, mais ça ne marche pas : les tests dans mon IDE ont un comportement différents que dans Maven
Dans ce cas, je n’ai qu’un seul conseil : faites le marcher !
Votre configuration doit être assez bonne pour que quand vos tests passent dans l’IDE, vous devez être assez confiants pour pousser votre code dans votre gestionnaire de source.
Si vraiment il y a un problème, l’intégration continue va vous prévenir.

Lancer un build Maven sur votre poste et bidouiller vos configurations (Maven ou IDE) doit être rare :

  • quand l’UDD a retourné une erreur et que vous avez diagnostiqué que le problème vient d’une configuration
  • quand justement vous avez modifié votre POM (pour rajouter un plugin, ajouter un module, etc.)

Ces 2 cas doivent rester marginaux :

  • si votre UDD vous retourne constamment des erreurs de configuration, prenez le temps de les corriger durablement
  • si vous modifiez trop souvent vos POM, il est surement temps de prendre un peu de recul et de stabiliser la configuration des projets.

En résumé : Ne passez pas votre temps dans la console Maven, passez-le à coder dans votre IDE

C'est marrant, ça, mais chez IT-Finance, on a passé pas mal de temps (trop, peut-être ?) à jouer avec le script maven qui permettait de générer l'application. Et bien des fois, j'ai suggéré à mes collègues de réfléchir à notre usage de maven. Est-ce qu'on n'essayait pas d'en faire trop avec maven ? Est-ce qu'on faisait les choses dans le bon sens avec cet outil qui, définitivement, n'est pas une silver-bullet ? Est-ce qu'on n'aurait pas dû rester avec ant (et éventuellement, utiliser un outil séparé de gestion des dépendances comme ivy) ?Je n'aurais sans doute jamais la réponse à cette question. Ce que je sais, en revanche, c'est que c'est encore un domaine où, peut-être sans même sans rendre compte, on réinventait beaucoup de choses.

Filed under  //   java   maven  

Comments [2]

le principe d'incertitude de maven

Depuis 3 jours, je me bats contre maven et certaines de ses pires horreurs.
En particulier avec le fait que, contre toute attente, alors que c'est la base du bordel, le système de résolution de dépendances est buggé (oui, mon fan, ça fait mal, mais à un moment il faut le reconnaître, c'est buggé).
Bon, évidement, en bonus (mais je l'ai déja dit) la doc est totallement, complètement et définitivement lamentable, les plugins sont terrifiants de nullité (essayez donc de savoir comment maven fait pour résoudre une dépendance, tiens. C'est magique, opaque, et foireux).
Bref, maven, ça chie.
Le pire, c'est que je ne crois pas être le seul à y penser.
En deux secondes de recherches, je suis par exemple tombé sur cette page : Introducing Buildr, or how we cured our Maven blues
Le but, ça n'est évidement pas de dire que buildr c'est bien, et que maven ça pue. Juste de montrer que les défauts de maven sont connus et agaçent réellement.
Surtout que cet après-midi, j'ai dû faire dix minutes d'ant, et c'était nettement, mais alors très netteemnt plus facile.
Reste plus qu'à mettre la main sur un outil de gestion de dépendances/build qui tienne réellement la route (parce que maven, hein).
Et si buildr est un concurrent valable, j'ai dans l'idée que même la wikipedia est riche d'idées.

Filed under  //   build   java   maven   ruby  

Comments [1]

grmbl

Ca m'énerve ce merdier, ça m'énerve !

Ca fait maintenant une semaine que je galère sur ce foutu bazar que peut être l'ensemble maven/google code/subversion.

J'essaye désespérement de faire une nouvelle version de majick-properties avec des mvn release, mais ça chie à chaqie fois d'une façon tellement lamentable que je sens bien que je vais lâcher l'affaire et trouver une autre solution pour faire de nouvelles versions...

Malheureusement, le problème, c'est que j'ai bien l'intention d'utiliser ma magie pour développer jPhotoOrganizer. Alors si je ne suis même pas capable de faire de versions correctes, je me demande bien comment je vais pouvoir utiliser le code de majik-properties ...

Mais bon, pour l'instant, j'arrête de me prendre la tête avec ces histoires de livraisons.

Filed under  //   majick-properties   maven  

Comments [0]

maven, google code, svn, toussa

Bon, ça chie un peu tout ça.

ce week-end, je me suis diot que j'allais faire une release de majick-properties, parce que le code me paraissait suffisant pour une alpha 0.1.

Donc, n'écoutant que mon mavenisme, j'ai lancé un simple

mvn release:prepare

Et dès le départ, grosse déconvenue.

En standard, j'avais mis mon projet maven en UTF-8, et je demandais à Eclipse d'enregistrer (par défaut) en cp-1252. J'ai doinc dû transcoder tous mes fichiers en UTF-8 à grands coups d'édition dans Notepad++. Long, pénible, et surtout, inutile.

Inutile parce que, dans Notepad++, il y a deux UTF-8 :

  • UTF-8 classique
  • UTF-8 sans BOM

Et figurez-vous que le compilateur Java a un bug connu avec l'UTF-8 classique : il lit le BOM comme un octet normal et considère que ce n'est pas un élément valide.

Du coup, j'ai dû reconvertir tous mes fichiers en UTF-8 sans BOM. Temps perdu ? environ 1/2 heure.

Ensuite, j'ai relancé maven, qui m'a dit que je n'avais pas de client svn valide. sans doute parce que pour faire des releases, il faut avoir un client svn en ligne de commande, et non pas celui intégré à Eclipse ... Attendez une seconde ... Si j'avais fait le mvn release:prepare dans Eclipse, ça aurait pu marcher ? J'essayerais ce soir, tiens.

En attendant, j'ai téléchargé slicksvn, qui semble être devenu le client officiel.

Et maintenant, ça coince juste sur le svn tag, qui semble être lié au fait que je lance mon mvn release:prepare sans donner mon login/pwd ...

Du coup, je suis un peu blasé. Mais je vais y arriver quand même (de toute façon, je n'ai pas trop le choix, si je veux pouvoir utiliser majick-properties partout dans le monde, je dois passer par les releases.

Filed under  //   java   majick-properties   maven  

Comments [0]

Maven et google code, ça commence à rouler

Sur les différents projets que j'ai développé en open-source, j'ai toujours utilisé Google code. Pas pour des raisons philisophico-fanatiques de fidélité absolue à Mountain View, mais plutôt parce que

  • la création de projet y est très facile,
  • il utilise svn en standard ,
  • il y a un wiki intégré (accessible via svn),
  • il y a un système de suivi de bugs (interfaçable avec mylyn, ce qui est un plus vraiment pas négligeable)

Hélas, la seule chose qui me manquait, c'était la possibilité de générer facilement un jar déployé dans un repository accessible dans le monde entier.

Mais, grâce à cette page de je ne sais quel projet google, j'ai trouvé ma solution (qui, comme je l'ai indiqué dans la page associée a nécessité un peu de travail que je vais devoir refaire).

Et du coup, j'ai déployé ma version 0.1 sur google très facilement.

Bon, il faut encore que je fouille un peu pour trouver comment uploader automatiquement les sources et la javadoc du projet (histoire de pouvoir bosser proprement, bon, apparement, tout est sur le site de guice), mais ça commence à rouler ...

On verra tout ça demain, je pense.

Filed under  //   java   maven  

Comments [0]

sacrénom d'un bug !

C'est le genre de trucs qui m'énervent, ça.

J'ai voulu être sérieux, j'ai fait une tonne de tests unitaires, et sans même avoir de rapports de couverture de test dans maven, je suis déja certain d'avoir au moins 75 % du code testé.

Enfin, testé ... dans Eclipse.

Parce que dans Maven, c'est une autre histoire. J'ai une espèce de sale foutu bug qui fait que mon premier test unitaire Swing (qui utilise bien sûr FEST-Swing) ne s'arrête pas.

Ah, si mon fan était là ! Il me dirait bien sûr que c'est un sale problème d'utilisation de l'EDT. Ouais, enfin bon, quand je regarde le code de mon test, il n'y a pas grand chose qui me choque.

Et encore moins quand j'utilise les méthodes de FEST-Swing pour m'assurer que je fais tout dans l'EDT.

Bref, je vais être bon pour fouiller.

Ce que ça a de particulièrement agaçant, c'est que comme le test ne se termine pas, je n'arrive pas à faire de

mvn deploy

Et ça, ça m'agaçce avec une force !

Bah ! Je trouverai la solution demain.

Filed under  //   build   java   majick-properties   maven   test  

Comments [2]

Le serpent de mer du jour : les IDE

Petit avant propos : ce message est issu d'une discussion sur une liste de diffusion Java à laquelle je participe. Il m'a semblé intéressant (surtout que je sais que certains de mes lecteurs sont comme moi développeurs Java)

Je suis étonné qu'un tel sujet ne déchaîne plus les passions.

J'ai souvenir de discussions plus enflammées sur des sujets moins polémique sur cette liste ...

On a du vieillir ;-)

Ca doit être ça

Je crois surtout que, grâce à maven en particulier, le choix d'un IDE n'est plus structurant pour les projets de grosse taille (typiquement les projets JEE). On a en effet maintenant toutes nos bibliothèques disponibles de manière standardisée quelquesoit l'interface de développement choisie.

C'est un peu faux en ce qui concerne les développements "visuels" quels qu'ils soient : depuis l'époque môdite de Struts, on cherche toujours, pour le web comme pour le swing, le générateur d'UI qui marche à tous les coups avant de toujours en revenir au développement à la main dans Eclipse ou NetBeans. Et là, en revanche, avoir ses petites habitudes, ça peut aider à gagner des dizaines de jours : savoir bien utiliser le debuggeur, connaître les raccourcis clavier, c'est le genre de feintes où l'habitude d'un outil est primordiale, plus encore que l'ergonomie du dit outil ou encore son intérêt réel.

Pour ce genre de cas (et histoire d'insister sur le thème "elle est finie la belle époque des débuts, quand je codais avec TextPad, la javadoc en WinHelp et le JDK en ligne de commande"), j'ai une citation chinoise qui est assez appropriée : "il n'y a pas de mauvais outils, seulement de mauvais ouvriers". En l'occurence, ça signifie pour moi que forcer un développeur à utiliser un outil qu'il ne connaît pas (genre un IDE, même s'il est meilleur comme IntelliJ Idea, qui garde pour moi une aura de qualité depuis mon dernier test qui remonte à 5 ans), ça revient à lui couper une main et lui demander d'être performant.

Parce que l'IDE, c'est notre troisième bras. C'est lui qui nous permet de voir le code sous différents aspects, de le travailler selon chacun de ces aspects, pour enfin le faire marcher. La contrepartie de ça, c'est que ne pas savoir utiliser un IDE, c'est en quelque sorte un aveu d'incompétence : on a un outil qui nous permet de définir une architecture, de coder un produit professsionnel, de le tester sous toutes les coutures, de voir quels sont les mauvais comportements du produit qu'on développe, et on ne sait utiliser que l'éditeur et (parfois) un tout petit peu le débuggeur. Ca, c'est un scandale. Moi, quand je vois ça, ça me donne envie de filer aux développeurs d'opérette qui en sont à ce niveau TextPad et une ligne de commande, juste pour leur faire comprendre qu'ils ne sont pas obligés d'utiliser le meilleur matériel s'ils ne savent pas s'en servir. Mais je m'égare ...

Pour finir, ma réponse à la question initiale est assez simple : quel IDE ? Celui que je préfère pour la tâche en cours : Eclipse pour coder et debugger, et NetBeans pour profiler. Et parfois notepad++ quand je dois juste modifier une ligne ou deux. Si vous me dites qu'ils sont tous les trois open-source et que c'est une volonté de ma part, je vous dirais que c'est faux. ils sont certes tous les trois open-sources et gratuits, mais la seule chose qui m'intéresse, c'est leur gratuité. je pourrais vous faire tout un laïus sur le darwinisme appliqué à la production logicielle démontrant que, pour les outils de développement, l'open-source garantit la meilleure qualité, mais je ne crois pas que ça vous intéresserait des tonnes ...

Filed under  //   développement   IDE   java   maven  

Comments [2]