<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>aheritier.net &#187; Java</title>
	<atom:link href="http://blog.aheritier.net/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.aheritier.net</link>
	<description></description>
	<lastBuildDate>Mon, 30 Jan 2012 16:35:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Paris JUG &#8211; 3 ans déjà !!!</title>
		<link>http://blog.aheritier.net/paris-jug-3-ans-deja/</link>
		<comments>http://blog.aheritier.net/paris-jug-3-ans-deja/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 05:00:19 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Communauté]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java User Group]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=1171</guid>
		<description><![CDATA[Comme il a bien grandit le bébé. 3 ans déjà qu&#8217;est né le Paris JUG. Ses parents, Antonio Goncalves et David Dewalle s&#8217;en sont bien occupés et ont trouvé une aide précieuse auprès de Zouheir Cadi pour finir par former &#8230; <a href="http://blog.aheritier.net/paris-jug-3-ans-deja/">Continuer la lecture <span class="meta-nav">&#8594;</span></a><br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>10</strong> (0 votes cast)</div><br />]]></description>
			<content:encoded><![CDATA[<p>Comme il a bien grandit le bébé. <a href="http://blog.aheritier.net/wp-content/uploads/2011/02/flyer-juggy-annif-3ans.png"><img src="http://blog.aheritier.net/wp-content/uploads/2011/02/flyer-juggy-annif-3ans.png" alt="" title="flyer-juggy-annif-3ans" width="461" height="480" class="alignright size-full wp-image-1172" /></a>3 ans déjà qu&#8217;est né le <a href="http://www.parisjug.org/xwiki/bin/view/Main/">Paris JUG</a>.<br />
Ses parents, Antonio Goncalves et David Dewalle s&#8217;en sont bien occupés et ont trouvé une aide précieuse auprès de Zouheir Cadi pour finir par former un mini équipe commando (Nicolas Martignole, Claude Falguière, &#8230;).<br />
Pour fêter cet évenement et remercier ses organisateurs qui ont fait le renouveau de la communauté Java en France une soirée exceptionnelle est organisée le Lundi 28 février. Elle commencera de 18h00 à 22h15 dans les locaux de la <a href="http://www.parisjug.org/xwiki/bin/view/Location/CIUP">Cité Universitaire Internationale</a>, avec des sessions sur le thème &#8220;Siffler en travaillant&#8221;.<br />
Cela sera suivit par une &#8220;surprise&#8221; puis un diner au <a href="http://maps.google.fr/maps/place?hl=fr&#038;sourceid=navclient-ff&#038;rlz=1B3GGGL_frFR294FR295&#038;um=1&#038;ie=UTF-8&#038;q=restaurant+le+vavin+paris&#038;fb=1&#038;gl=fr&#038;hq=restaurant+le+vavin&#038;hnear=paris&#038;cid=16763854041267710574">Vavin</a> et vous pourrez terminer la nuit au <a href="http://goo.gl/maps/61Ip">Falstaff</a>.<br />
(Compte tenu du programme de la soirée si vous venez en voiture, garez plutot du coté de Montparnasse et rejoignez la Cité Universitaire Internationale en transports. Le retour sera organisé par le JUG).<br />
J&#8217;ai une fois de plus la grande malchance de ne pas pouvoir y venir, étant à l&#8217;autre bout du monde avec les équipes Vietnamienne d&#8217;eXo alors profitez-en pour moi !! (ne me plaignez pas, je vous rassure c&#8217;est que du bonheur aussi <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )<br />
La soirée promet d&#8217;être somptueuse. N&#8217;oubliez surtout pas de vous inscrire pour la <a href="http://www.jugevents.org/jugevents/event/34392">soirée</a>, la surprise et le restaurant (inscriptions ouvertes dans quelques jours).<br />
Retrouvez comme d&#8217;habitude le programme détaillé de la soirée sur le <a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20110228">site du ParisJUG</a>.</p>
<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>10</strong> (0 votes cast)</div><br />]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/paris-jug-3-ans-deja/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Séance Dédicace à la librairie Le Monde en Tique</title>
		<link>http://blog.aheritier.net/seance-dedicace-a-la-librairie-le-monde-en-tique/</link>
		<comments>http://blog.aheritier.net/seance-dedicace-a-la-librairie-le-monde-en-tique/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 05:00:03 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Apache Maven]]></category>
		<category><![CDATA[Communauté]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=1113</guid>
		<description><![CDATA[Roulements de tambours, faites sonner les trompettes, je sors de chez moi Ce samedi 23 octobre de 15h à 18h je serai à la librairie Le Monde en Tique pour une séance dédicace EXCEPTIONNELLE !! Bien sur vous pourrez y &#8230; <a href="http://blog.aheritier.net/seance-dedicace-a-la-librairie-le-monde-en-tique/">Continuer la lecture <span class="meta-nav">&#8594;</span></a><br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>10</strong> (0 votes cast)</div><br />]]></description>
			<content:encoded><![CDATA[<p>Roulements de tambours, faites sonner les trompettes, je sors de chez moi <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Ce samedi 23 octobre de 15h à 18h je serai à la librairie <a href="http://www.lmet.fr/">Le Monde en Tique</a> pour une séance dédicace EXCEPTIONNELLE !!<br />
Bien sur vous pourrez y retrouver mon livre <a href="http://www.pearson.fr/livre/?GCOI=27440100730370">Apache Maven aux éditions Pearson</a>, mais je sais que vous l&#8217;avez déjà tous sous votre oreiller.<br />
Alors je n&#8217;y serai pas seul. Je serai accompagné par deux pointures, que dis-je ! Deux monstres sacrés de la communauté Java francophone.<br />
<a href="http://blog.aheritier.net/wp-content/uploads/2010/10/dedicace.jpg"><img src="http://blog.aheritier.net/wp-content/uploads/2010/10/dedicace.jpg" alt="" title="dedicace" width="416" height="166" class="aligncenter size-full wp-image-1114" /></a><br />
<span id="more-1113"></span></p>
<p>Le premier n&#8217;est autre qu&#8217;<a href="http://emmanuelbernard.com/About%20me.html">Emmanuel Bernard</a>, surnommé <a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20100309">&#8220;Chuck Norris&#8221;</a> ! Cependant ses amis ont plutôt tendance à l&#8217;appeler l&#8217;homme aux mitaines depuis les révélations qu&#8217;il a pu faire dans le podcast <a href="http://lescastcodeurs.com/">Les CastCodeurs</a> qu&#8217;il a crée l&#8217;année dernière. Contributeur OpenSource depuis les origines du monde il a fortement contribué à <a href="http://hibernate.org/">Hibernate</a> et se consacre aujourd&#8217;hui à <a href="http://www.hibernate.org/subprojects/search.html">Hibernate Search</a> pour lequel il a publié un ouvrage : <a href="http://www.manning.com/bernard/">Hibernate Search in Action aux éditions Manning</a>.</p>
<p>Mon deuxième compère est une figure de la communauté Java Francophone. C&#8217;est à lui que l&#8217;on doit la revolution des Java User Group en France qui se sont sont mis à fleurir après qu&#8217;il ait lancé <a href="http://www.parisjug.org/">l&#8217;instance parisienne</a> qui accueille désormais 200 personnes chaque mois. Il participa à travers le <a href="http://jcp.org/">JCP</a> (JSR 316, JSR 317, JSR 318) à la création de JEE6 qu&#8217;il vous décrit, dissect, explique dans son ouvrage<a href="http://apress.com/book/view/143022889X"> Java EE 6 aux éditions Apress</a> qui en est déjà à sa seconde édition. Dans un tout autre registre il nous a promis de faire sur place une démonstration de ses talents de danseur avec entorse à la clef. </p>
<p>Alors si vous voulez venir discuter avec nous, manger quelques petits gateaux ou encore rencontrer les pom-pom girls qu&#8217;Antonio nous a promis, rejoignez nous ce samedi 23 octobre de 15h à 18h à la librairie <a href="http://www.lmet.fr/">Le Monde en Tique</a> (6 Rue Maître Albert, 75005 Paris).<br />
Nous ne ferons pas de discrimination. Nous accepterons de discuter même avec ceux qui ne font pas du Java et qui n&#8217;ont pas acheté nos 3 livres.</p>
<p><iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.fr/maps?hl=&amp;q=6 rue Maître Albert paris&amp;ie=UTF8&amp;hnear=6 Rue Maître Albert, 75005 Paris, Ile-de-France&amp;z=14&amp;ll=48.850881,2.349899&amp;output=embed"></iframe><br /><small><a href="http://maps.google.fr/maps?hl=&amp;q=6 rue Maître Albert paris&amp;ie=UTF8&amp;hnear=6 Rue Maître Albert, 75005 Paris, Ile-de-France&amp;z=14&amp;ll=48.850881,2.349899&amp;source=embed" style="color:#0000FF;text-align:left">View Larger Map</a></small></p>
<p><b>Un invité mystère pourrait être présent ce jour là et dans ce cas vous pourriez avoir des copies de mon livre d&#8217;une valeur unique <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </b></p>
<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>10</strong> (0 votes cast)</div><br />]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/seance-dedicace-a-la-librairie-le-monde-en-tique/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le bug Maven du jour : MRESOURCES-104</title>
		<link>http://blog.aheritier.net/le-bug-maven-du-jour-mresources-104/</link>
		<comments>http://blog.aheritier.net/le-bug-maven-du-jour-mresources-104/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 20:18:09 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Apache Maven]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=1076</guid>
		<description><![CDATA[Il parait que je dis toujours que du bien de Maven (c&#8217;est tout du moins ce que certains ressentent en écoutant le podcast Les Cast Codeurs). C&#8217;est pourtant, je pense, loin d&#8217;être la vérité et ceux qui peuvent assister aux &#8230; <a href="http://blog.aheritier.net/le-bug-maven-du-jour-mresources-104/">Continuer la lecture <span class="meta-nav">&#8594;</span></a><br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=6.6" /></div><div>Rating: 6.6/<strong>10</strong> (5 votes cast)</div><br />]]></description>
			<content:encoded><![CDATA[<p><a href="http://maven.apache.org"><img src="http://blog.aheritier.net/wp-content/uploads/2009/11/maventxt_logo_200.png" alt="Apache Maven" title="Apache Maven" width="200" height="53" class="alignright size-full wp-image-696" /></a>Il parait que je dis toujours que du bien de <a href="http://maven.apache.org">Maven</a> (c&#8217;est tout du moins ce que certains ressentent en écoutant le podcast <a href="http://lescastcodeurs.com/">Les Cast Codeurs</a>). C&#8217;est pourtant, je pense, loin d&#8217;être la vérité et ceux qui peuvent assister aux différents Java Users Groups que j&#8217;ai pu présenter doivent pouvoir confirmer que je n&#8217;hésite pas aussi à casser du sucre dessus.<br />
Certainement pour me punir voilà que je tombe ce soir sur un bug qui m&#8217;a fait perdre 30 minutes. Je ne compte pas rédiger un blog par jour pour décrire un bug Maven (même si il y aurait largement de quoi faire) mais en partageant l&#8217;information j&#8217;espère éviter à quelques autres ce soucis.<br />
<span id="more-1076"></span><br />
Tout débute par un sous projet de GateIn (WSRP) dans lequel on souhaite filtrer un fichier de ressources. Jusque là, rien d&#8217;exceptionnel, cela fait partie des fonctionnalités de Maven depuis des années.<br />
On rajoute dans le <a href="http://anonsvn.jboss.org/repos/gatein/components/wsrp/trunk/common/pom.xml">POM</a> l&#8217;activation du filtrage :<br />
<code>&lt;project<br />
&nbsp;xmlns="http://maven.apache.org/POM/4.0.0"<br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;xsi:schemaLocation="http://maven.apache.org/POM/4.0.0&nbsp;http://maven.apache.org/maven-v4_0_0.xsd"&gt;<br />
&nbsp;&nbsp;&nbsp;...<br />
&nbsp;&nbsp;&nbsp;&lt;build&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;resources&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;resource&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;directory&gt;src/main/resources&lt;/directory&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filtering&gt;true&lt;/filtering&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/resource&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/resources&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/build&gt;<br />
&lt;/project&gt;<br />
</code><br />
Nous plaçons un fichier <a href="http://anonsvn.jboss.org/repos/gatein/components/wsrp/trunk/common/src/main/resources/wsrp.properties">wsrp.properties</a> dans le répertoire src/main/resources avec la propriété ${project.version} pour que Maven la filtre :<br />
<code>#<br />
# JBoss, a division of Red Hat<br />
# Copyright 2010, Red Hat Middleware, LLC, and individual<br />
# contributors as indicated by the @authors tag. See the<br />
# copyright.txt in the distribution for a full listing of<br />
# individual contributors.<br />
#<br />
# This is free software; you can redistribute it and/or modify it<br />
# under the terms of the GNU Lesser General Public License as<br />
# published by the Free Software Foundation; either version 2.1 of<br />
# the License, or (at your option) any later version.<br />
#<br />
# This software is distributed in the hope that it will be useful,<br />
# but WITHOUT ANY WARRANTY; without even the implied warranty of<br />
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU<br />
# Lesser General Public License for more details.<br />
#<br />
# You should have received a copy of the GNU Lesser General Public<br />
# License along with this software; if not, write to the Free<br />
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA<br />
# 02110-1301 USA, or see the FSF site: http://www.fsf.org.<br />
#<br />
wsrp.service.version=${project.version}<br />
</code><br />
On lance Maven et on s&#8217;attend à ce que la propriété soit remplacée dans le fichier properties copiée dans le répertoire target/classes&#8230;.. mais rien !!<br />
Je me mets alors à tester la syntaxe alternative @project.version@ ainsi qu&#8217;un propriété simple injectée via les POM ou la ligne de commande &#8230;. rien. Pas de filtrage.<br />
Je commence alors à tester avec différentes versions du plugin resources (le projet utilise la version 2.4.1). Je suis d&#8217;ailleurs bien content d&#8217;avoir mis sous la forme d&#8217;une propriété toutes les versions des plugins pour faire ce genre de test en passant la valeur en ligne de commande. 2.4, 2.4.1, 2.4.2 KO. Par contre la 2.3 fonctionne.<br />
C&#8217;est énorme !!!! Comment le filtrage peut ne pas fonctionner et ce sur les 3 versions du plugin ?<br />
Je cherche dans les bug ouverts et voilà que je découvre l&#8217;horrible bug <a href="http://jira.codehaus.org/browse/MRESOURCES-104">MRESOURCES-104</a> !!<br />
Les délimiteurs des tokens/propriétés à remplacer/filtrer sont par défaut @XXXX@ ou ${XXXX}. Le bug se trouve au niveau du parsing des fichiers car si le plugin trouve un délimiteur de début sans fin, il s&#8217;emmele les pinceaux et arrête de filtrer.<br />
De ce fait si dans le fichier à filtrer on trouve un caractère @ seul, comme dans l&#8217;entête JBoss, le filtrage ne fonctionne pas.<br />
Il existe cependant un contournement indiqué dans les commentaires qui consiste à désactiver les délimiteurs par défaut pour ne définir que la version ${} :<br />
<code>&lt;project<br />
&nbsp;xmlns="http://maven.apache.org/POM/4.0.0"<br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;xsi:schemaLocation="http://maven.apache.org/POM/4.0.0&nbsp;http://maven.apache.org/maven-v4_0_0.xsd"&gt;<br />
&nbsp;&nbsp;&nbsp;...<br />
&nbsp;&nbsp;&nbsp;&lt;build&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;resources&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;resource&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;directory&gt;src/main/resources&lt;/directory&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filtering&gt;true&lt;/filtering&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/resource&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/resources&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;plugins&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;WORKAROUND&nbsp;for&nbsp;:&nbsp;http://jira.codehaus.org/browse/MRESOURCES-104&nbsp;--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactid&gt;maven-resources-plugin&lt;/artifactid&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;delimiters&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;delimiter&gt;${*}&lt;/delimiter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/delimiters&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;usedefaultdelimiters&gt;false&lt;/usedefaultdelimiters&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/configuration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/plugin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/plugins&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/build&gt;<br />
&lt;/project&gt;<br />
</code><br />
Et voilà comment j&#8217;ai perdu 30 minutes. Et oui Maven n&#8217;est pas magique et il existe des bugs !! Le mythe est tombé.<br />
Mais une fois de plus lorsque l&#8217;on propose des services de plus en plus haut complexes on s&#8217;expose à créer des bugs encore plus pervers. Maintenant je n&#8217;ai plus qu&#8217;à voir si en 30 minutes j&#8217;arrive à le corriger.<br />
Est ce que c&#8217;est pour cela que je vais remettre en cause les fondements de Maven ? Et bien non. Rien n&#8217;est parfait mais je crois en la nécessité de standardiser le build et je ne pense pas que les autres solutions existantes soient aujourd&#8217;hui exemptes de bug. En tout cas je regarde toujours ce qui se passe à coté et j&#8217;espère bien que tout ou tard la compétition renaitra pour motiver encore plus l&#8217;équipe Maven.</p>
<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=6.6" /></div><div>Rating: 6.6/<strong>10</strong> (5 votes cast)</div><br />]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/le-bug-maven-du-jour-mresources-104/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Domptez vos versions</title>
		<link>http://blog.aheritier.net/domptez-vos-versions/</link>
		<comments>http://blog.aheritier.net/domptez-vos-versions/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 13:14:41 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Apache Maven]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=1053</guid>
		<description><![CDATA[Dans un soucis de qualité et de traçabilité Apache Maven a introduit et imposé dès le départ la notion de version pour identifier les projets et leurs livrables. Cependant il faut bien avouer que pendant longtemps il n&#8217;y avait pas &#8230; <a href="http://blog.aheritier.net/domptez-vos-versions/">Continuer la lecture <span class="meta-nav">&#8594;</span></a><br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=9.0" /></div><div>Rating: 9.0/<strong>10</strong> (7 votes cast)</div><br />]]></description>
			<content:encoded><![CDATA[<p><a href="http://maven.apache.org"><img src="http://blog.aheritier.net/wp-content/uploads/2009/11/maventxt_logo_200.png" alt="Apache Maven" title="Apache Maven" width="200" height="53" class="alignright size-full wp-image-696" /></a>Dans un soucis de qualité et de traçabilité Apache Maven a introduit et imposé dès le départ la notion de version pour identifier les projets et leurs livrables. Cependant il faut bien avouer que pendant longtemps il n&#8217;y avait pas d&#8217;outil à la disposition des équipes pour analyser et manipuler les différentes versions utilisées dans les descripteurs Maven. Ce manque a été en partie comblé il y a un peu plus d&#8217;un an par la  création du <a href="http://mojo.codehaus.org/versions-maven-plugin/">plugin versions</a>, hébergé sur <a href="http://mojo.codehaus.org">http://mojo.codehaus.org</a> que je me propose de vous présenter.<br />
<a href="http://lescastcodeurs.com/" target="_blank"><img src="http://lescastcodeurs.com/img/entendu_sur_castcodeurs_200px.png" alt="Entendu sur Les Cast Codeurs" class="alignright size-full"/></a>Cet article est un complément aux explications que j&#8217;ai pu donner dans <a href="http://lescastcodeurs.com/2010/01/les-cast-codeurs-podcast-episode-16-le-seul-podcast-java-cette-semaine-qui-ne-parle-pas-du-webcast-de-snoracle/">la rubrique &quot;les mains dans le cambouis&quot; de l&#8217;épisode 16</a> du podcast <a href="http://lescastcodeurs.com/">Les Cast Codeurs</a>.</p>
<p>Cet article est basé sur la version 1.1 du plugin versions publiée en octobre 2009.</p>
<p><span id="more-1053"></span></p>
<h1>Abracadabra, de version tu changeras !</h1>
<p>Le fait que Maven considère que dans un projet tout module doive pouvoir être construit indépendamment des autres, toutes les références internes (héritages, dépendances, &#8230;) répètent inlassablement le numéro de version du projet. Il existe bien des palliatifs comme utiliser la propriété ${project.version} pour ne pas répeter cette information au niveau des dépendances. Pourtant cela ne fonctionne pas au niveau de l&#8217;héritage car on retombe sur le problème de la poule et de l&#8217;oeuf. Si ma version n&#8217;est que dans le pom parent de mon projet, comment mon module va trouver son parent sans connaitre sa version ?</p>
<p>Cela crée donc souvent la panique à bord dans l&#8217;équipe projet lorsque pour une raison X ou Y il est nécessaire de changer la version en cours de développement. Les plus geek sortiront des commandes find, sed ou autre mais cela n&#8217;est pas toujours sans erreurs surtout si l&#8217;on a la malchance d&#8217;avoir notre numéro de version à remplacer utilisé par ailleurs (dans une dépendances externe par exemple).</p>
<p>Le plugin versions propose donc le mojo:set pour simplifier cette opération. </p>
<p><code>versions:set<br />
   Sets the current projects version, updating the details of any child modules<br />
   as necessary.</code></p>
<p>Il suffit de passer en paramètre la nouvelle version à utiliser pour que le plugin remplace partout (héritage, dépendances, &#8230;) l&#8217;ancienne valeur par la nouvelle.</p>
<p><code>  mvn versions:set -DnewVersion=1.2.3-SNAPSHOT</code></p>
<p>
  Mais que faire si l&#8217;on avoulu faire la modification à la main et que l&#8217;on s&#8217;est planté ? Si par exemple la chaine d&#8217;héritage est rompue au sein de vos modules vous risquez de vous retrouver avec ce genre d&#8217;erreur (C&#8217;est promis on à amélioré la qualité des erreurs remontées dans Maven 3) :</p>
<p><code>[INFO] Scanning for projects...<br />
   [INFO] ------------------------------------------------------------------------<br />
   [ERROR] FATAL ERROR<br />
   [INFO] ------------------------------------------------------------------------<br />
   [INFO] Error building POM (may not be this project's POM).<br />
Project ID: com.foo.bar:bar-child:jar:null<br />
Reason: Cannot find parent: com.foo.bar:bar for project: com.foo.bar:bar-child:jar:null</code></p>
<p> Une fois de plus le plugin versions vient à vote secours avec le mojo versions:update-child-modules</p>
<p><code>versions:update-child-modules<br />
   Scans the current projects child modules, updating the versions of any which<br />
   use the current project to the version of the current project.</code></p>
<p>Lancez la commande mvn -N versions:update-child-modules et votre soucis se sera envolé (attention à ne pas oublier l&#8217;option -N car sinon maven essaiera de résoudre vos modules et il echouera à cause du problème).</p>
<p>Références :</p>
<ul>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/examples/set.html">http://mojo.codehaus.org/versions-maven-plugin/examples/set.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/examples/update-child-modules.html">http://mojo.codehaus.org/versions-maven-plugin/examples/update-child-modules.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/set-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/set-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/update-child-modules-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/update-child-modules-mojo.html</a></li>
</ul>
<h1>Boule de cristal : Dis-moi si j&#8217;utilise les dernières versions de mes dépendances ou plugins ?</h1>
<p>Tôt ou tard dans la vie d&#8217;un projet se pose la question de savoir si nous utilisons des versions récentes des plugins Maven ou des dépendances. Cela peut être suite à la découverte d&#8217;un bug, ou alors tout simplement pour essayer de rester à jour afin de conserver un support actif sur des livrables open-sources par exemple (essayez donc de demander à un véritable développeur open-source &#8211; qui le fait  de bon coeur sur son temps libre &#8211; de corriger un bug et livrer un correctif sur une version<br />
  qui a plusieurs années !!). Le nombre important de plugins et de dépendances rentrant en compte dans un projet est vite faramineux et cette tâche devient vite une peine si l&#8217;on doit aller consulter un à un tous les sites web impartis ou si l&#8217;on doit rechercher ou naviguer dans le repository central Maven pour identifier les mises à jour. </p>
<p>Pour répondre à ce besoin le plugin versions fournit   une série de mojo qui vont automatiquement analyser les plugins et dépendances que vous utilisez pour  comparer vos versions actuelles avec celles disponibles sur les référentiels d&#8217;artifacts que vous avez déclaré dans votre projet ou paramètres utilisateurs. Le plugin vous permet de visualiser le résultat soit sous la forme d&#8217;un rapport en ligne de commande (versions:display-dependency-updates, versions:display-plugin-updates) soit dans le site web du projet généré par Maven (versions:display-dependency-report, versions:display-plugin-report). Cela fonctione aussi si vous avez stocké vos numéros de versions dans des propriétés (versions:display-property-updates, versions:property-updates-report).</p>
<p><code>versions:display-dependency-updates<br />
 Displays all dependencies that have newer versions available.<br />
versions:dependency-updates-report<br />
 Generates a report of available updates for the dependencies of a project.<br />
versions:display-plugin-updates<br />
   Displays all plugins that have newer versions available.<br />
versions:plugin-updates-report<br />
   Generates a report of available updates for the dependencies of a project.<br />
versions:display-property-updates<br />
   Sets properties to the latest versions of specific artifacts.<br />
versions:property-updates-report<br />
   Generates a report of available updates for properties of a project which are<br />
   linked to the dependencies and/or plugins of a project.</code></p>
<p>Exemple de rapport en ligne de commande pour les mises à jour de dépendances :</p>
<p><code>   [INFO] --- versions-maven-plugin:1.1:display-dependency-updates (default-cli) @ maven-my-plugin ---<br />
   [INFO] The following dependencies in Dependencies are using the newest version:<br />
   [INFO]   org.apache.maven:maven-core .................................... 2.2.1<br />
   [INFO]   org.apache.maven:maven-toolchain ................................. 1.0<br />
   [INFO]   org.apache.maven.shared:maven-common-artifact-filters ............ 1.2<br />
   [INFO]   plexus:plexus-utils ............................................ 1.0.1<br />
   [INFO]   rhino:js ....................................................... 1.7R1<br />
   [INFO]<br />
   [INFO] The following dependencies in Dependencies have newer versions:<br />
   [INFO]   org.apache.maven:maven-artifact ................. 2.2.1 -&gt; 3.0-alpha-7<br />
   [INFO]   org.apache.maven:maven-plugin-api ............... 2.2.1 -&gt; 3.0-alpha-7</code></p>
<p>Exemple de rapport intégré dans le site web maven pour les mises à jour de dépendances :</p>
<p><a href="http://blog.aheritier.net/wp-content/uploads/2010/04/maven-versions-updates.png"><img src="http://blog.aheritier.net/wp-content/uploads/2010/04/maven-versions-updates-300x172.png" alt="" title="maven-versions-updates" width="300" height="172" class="aligncenter size-medium wp-image-1056" /></a></p>
<p>Vous noterez que ce rapport est bien plus complet et vous permet de facilement identifier les dernières versions majeurs, mineurs,correctives disponibles. Je vous conseille de configurer le plugin pour utiliser la méthode de comparaison &quot;Mercury&quot; (celle de maven 3) plutot que la version par defaut (celle de maven 2) pour obtenir des résultats plus judicieux sur certaines librairies qui ont publié des livrables avec des versions exotiques.</p>
<p>Autre chose très utile, le rapport  sur les mises à jour de plugin vous alerte si les versions des plugins utilisés ne sont pas définies dans votre projet (ce qui est une mauvaise pratique Maven  puisque vous risquez d&#8217;avoir une mise à jour qui détériore votre build.</p>
<p><code>   [INFO] [versions:display-plugin-updates]<br />
   [INFO]<br />
   [INFO] The following plugin updates are available:<br />
   [INFO]   maven-checkstyle-plugin .................................. 2.1 -&gt; 2.2<br />
   [INFO]   maven-clean-plugin ....................................... 2.1 -&gt; 2.2<br />
   [INFO]   maven-deploy-plugin ...................................... 2.3 -&gt; 2.4<br />
   [INFO]   maven-javadoc-plugin ..................................... 2.4 -&gt; 2.5<br />
   [INFO]   maven-site-plugin .......................... 2.0-beta-6 -&gt; 2.0-beta-7<br />
   [INFO]<br />
   [WARNING] The following plugins do not have their version specified:<br />
   [WARNING]   maven-compiler-plugin ..................... (from super-pom) 2.0.2<br />
   [WARNING]   maven-deploy-plugin ......................... (from super-pom) 2.3<br />
   [WARNING]   maven-install-plugin ........................ (from super-pom) 2.2<br />
   [WARNING]   maven-javadoc-plugin ........................ (from super-pom) 2.4<br />
   [WARNING]   maven-site-plugin .................... (from super-pom) 2.0-beta-6<br />
   [WARNING]   org.codehaus.mojo:build-helper-maven-plugin .................. 1.2</code></p>
<p>Exemple de rapport sur les mises à jour de propriétés qui contiennent des versions :</p>
<p><code>   [INFO] [versions:display-property-updates]<br />
   [INFO]<br />
   [INFO] The following version property updates are available:<br />
   [INFO]   ${doxiaVersion} ........................................ 1.0 -&gt; 1.1.1<br />
   [INFO]   ${doxia-sitetoolsVersion} .............................. 1.0 -&gt; 1.1.1<br />
</code></p>
<p>&nbsp;</p>
<p>Références : </p>
<ul>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/examples/display-dependency-updates.html">http://mojo.codehaus.org/versions-maven-plugin/examples/display-dependency-updates.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/examples/display-plugin-updates.html">http://mojo.codehaus.org/versions-maven-plugin/examples/display-plugin-updates.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/examples/display-property-updates.html">http://mojo.codehaus.org/versions-maven-plugin/examples/display-property-updates.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/dependency-updates-report-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/dependency-updates-report-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/display-dependency-updates-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/display-dependency-updates-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/display-plugin-updates-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/display-plugin-updates-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/display-property-updates-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/display-property-updates-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/plugin-updates-report-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/plugin-updates-report-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/property-updates-report-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/property-updates-report-mojo.html</a></li>
</ul>
<h1>Je suis ton père !</h1>
<p>Avec le mécanisme d&#8217;héritage des descripteurs de projets, il est simple de mettre en place des descripteurs parents au niveau d&#8217;une entreprise, d&#8217;une forge ou simplement de plsuieurs projets pour partager un certain nombre de paramètres communs. Ces descripteurs ont leur propre cycle de vie, mais il est souvent conseillé d&#8217;utiliser la dernière version disponible. Au lieu d&#8217;aller voir manuellement quelle est la dernière version disponible il suffit d&#8217;appeler la commande versions:update-parent</p>
<p>Exemple :</p>
<p><code><br />
   [INFO] [versions:update-parent]<br />
   ...<br />
   [INFO] artifact org.codehaus.mojo:mojo: checking for updates from codehaus.org<br />
   [INFO] artifact org.codehaus.mojo:mojo: checking for updates from central<br />
   [INFO] Updating parent from 14 to 17</code></p>
<p>Cela ne vous évitera pas cependant d&#8217;aller chercher la release note associée à la nouvelle version pour comprendre les impacts espérés (ou non) sur votre build.</p>
<p>Vous pouvez aussi préciser un intervalle pour la mise à jour :</p>
<p><code>mvn versions:update-parent -DparentVersion=&quot;[14,16)&quot;</code></p>
<p>Et même autoriser les SNAPSHOTs :</p>
<p><code>mvn versions:update-parent -DallowSnapshots=true</code></p>
<p>Références :</p>
<ul>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/examples/update-parent.html">http://mojo.codehaus.org/versions-maven-plugin/examples/update-parent.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/update-parent-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/update-parent-mojo.html</a></li>
</ul>
<h1>Maitrisez le chaos !</h1>
<p>Le concept de versions dans Maven propose deux types de versions qui ne sont pas stables dans le temps :</p>
<ul>
<li>Les SNAPSHOTs : Elles représentent les projets en cours de développement. Les livrables avec des versions dites SNASPHOT sont régulièrement actualisées par Maven (une fois par jour par défaut). Ces livrables sont stockés avec un identifiant unique lorsqu&#8217;ils sont déployés sur un référentiel distant.</li>
<li>Les ranges : Ce sont des intervals de versions. Au lieu de dire que l&#8217;on veut une version donnée d&#8217;un livrable, on laisse le choix à maven de choisir la version la plus récente dans un ensemble prédéfini.</li>
</ul>
<p>Le principale problème en utilisant ces types de versions dans votre projet c&#8217;est que du jour au lendemain Maven peut les mettre à jour et que cela peut entrainer des régressions. Pour l&#8217;éviter il est utile de pouvoir figer ces versions soit en définissant exactement avec leurs identifiants uniques les SNASPHOTs que l&#8217;on utilise, soit en choisissant les versions aujourd&#8217;hui utilisées dans les intervales (ranges).</p>
<p>Pour cela le plugin versions propose les mojos versions:lock-snapshots, versions:unlock-snapshots et versions:resolve-ranges qui vous permettent d&#8217;éditer ces versions. </p>
<p><code>versions:lock-snapshots<br />
   Attempts to resolve unlocked snapshot dependency versions to the locked<br />
   timestamp versions used in the build. For example, an unlocked snapshot<br />
   version like '1.0-SNAPSHOT' could be resolved to '1.0-20090128.202731-1'. If a<br />
   timestamped snapshot is not available, then the version will remained<br />
   unchanged. This would be the case if the dependency is only available in the<br />
   local repository and not in a remote snapshot repository.<br />
versions:unlock-snapshots<br />
   Attempts to resolve unlocked snapshot dependency versions to the locked<br />
   timestamp versions used in the build. For example, an unlocked snapshot<br />
   version like '1.0-SNAPSHOT' could be resolved to '1.0-20090128.202731-1'. If a<br />
   timestamped snapshot is not available, then the version will remained<br />
   unchanged. This would be the case if the dependency is only available in the<br />
   local repository and not in a remote snapshot repository.<br />
versions:resolve-ranges<br />
   Attempts to resolve dependency version ranges to the specific version being<br />
   used in the build. For example a version range of '[1.0, 1.2)' would be<br />
   resolved to the specific version currently in use '1.1'.<br />
</code></p>
<p>Vous y trouverez aussi des options pour inclures ou exclures certaines dépendances afin de cibler vos mises à jour.</p>
<p><code>mvn versions:lock-snapshots -Dincludes=org.codehaus.plexus:*,junit:junit</code></p>
<p>Références :</p>
<ul>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/examples/lock-snapshots.html">http://mojo.codehaus.org/versions-maven-plugin/examples/lock-snapshots.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/examples/unlock-snapshots.html">http://mojo.codehaus.org/versions-maven-plugin/examples/unlock-snapshots.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/examples/resolve-ranges.html">http://mojo.codehaus.org/versions-maven-plugin/examples/resolve-ranges.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/lock-snapshots-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/lock-snapshots-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/resolve-ranges-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/resolve-ranges-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/unlock-snapshots-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/unlock-snapshots-mojo.html</a></li>
</ul>
<h1>Mettez à jour ce que vous voulez !</h1>
<p>Pour terminer le plugin mojo offre toute une série de mojos pour mettre à jour vos dépendances vers les versions suivantes ou les toutes dernières versions. On peu utiliser soit la prochaine version release ou snapshot. On peut aussi controler/filtrer les dépendances à mettre à jour.</p>
<p><code>versions:update-properties<br />
   Sets properties to the latest versions of specific artifacts.<br />
versions:use-latest-releases<br />
   Replaces any release versions with the latest release version.<br />
versions:use-latest-snapshots<br />
   Replaces any release versions with the latest snapshot version (if it has been<br />
   deployed).<br />
versions:use-latest-versions<br />
   Replaces any version with the latest version.<br />
versions:use-next-releases<br />
   Replaces any release versions with the next release version (if it has been<br />
   released).<br />
versions:use-next-snapshots<br />
   Replaces any release versions with the next snapshot version (if it has been<br />
   deployed).<br />
versions:use-next-versions<br />
   Replaces any version with the latest version.<br />
versions:use-releases<br />
   Replaces any -SNAPSHOT versions with the corresponding release version (if it<br />
   has been released).</code></p>
<p>Références : </p>
<ul>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/examples/advancing-dependency-versions.html">http://mojo.codehaus.org/versions-maven-plugin/examples/advancing-dependency-versions.html</a> </li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/examples/update-properties.html">http://mojo.codehaus.org/versions-maven-plugin/examples/update-properties.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/examples/use-releases.html">http://mojo.codehaus.org/versions-maven-plugin/examples/use-releases.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/update-properties-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/update-properties-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/use-latest-releases-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/use-latest-releases-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/use-latest-snapshots-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/use-latest-snapshots-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/use-latest-versions-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/use-latest-versions-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/use-next-releases-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/use-next-releases-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/use-next-snapshots-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/use-next-snapshots-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/use-next-versions-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/use-next-versions-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/use-releases-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/use-releases-mojo.html</a></li>
</ul>
<h1>Oopps !!!!</h1>
<p>Même si une large partie des projets sont supposés être gérés dans un gestionaire de versions de sources, le plugin versions intègre par défaut sont propre système de validation/annulation pour toutes les opérations dans lesquelles il modifie vos descripteurs de projets. Pour cela il crée des copies de sauvegarde de vos descripteurs. Vous pouvez alors les supprimer (et donc valider ses changements) avec la commande versions:commit, ou vous pouvez tout annuler avec versions:revert. ATTENTION, cette sauvegarde ne gère pas d&#8217;historique. Elle ne conserve que la dernière modification. Pensez à valider ou rejeter vos changements après chaque modification.</p>
<p><code>versions:commit<br />
   Removes the initial backup of the pom, thereby accepting the changes.<br />
versions:revert<br />
   Restores the pom from the initial backup.</code></p>
<p>Références :</p>
<ul>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/commit-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/commit-mojo.html</a></li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/revert-mojo.html">http://mojo.codehaus.org/versions-maven-plugin/revert-mojo.html</a></li>
</ul>
<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=9.0" /></div><div>Rating: 9.0/<strong>10</strong> (7 votes cast)</div><br />]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/domptez-vos-versions/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Build partiel avec Maven : Construire moins pour aller plus vite.</title>
		<link>http://blog.aheritier.net/construire-moins-pour-aller-plus-vite/</link>
		<comments>http://blog.aheritier.net/construire-moins-pour-aller-plus-vite/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 20:05:00 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Apache Maven]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[LesCastCodeurs]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=977</guid>
		<description><![CDATA[Apache Maven permet nativement de découper un projet en sous-modules. Chaque module est un élément autonome avec son propre cycle de vie. Maven utilise ce que l&#8217;on appel le &#8220;reactor&#8221; pour orchestrer dans un projet l&#8217;appel des différents modules en &#8230; <a href="http://blog.aheritier.net/construire-moins-pour-aller-plus-vite/">Continuer la lecture <span class="meta-nav">&#8594;</span></a><br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=9.9" /></div><div>Rating: 9.9/<strong>10</strong> (9 votes cast)</div><br />]]></description>
			<content:encoded><![CDATA[<p><a href="http://maven.apache.org" target="_blank"><img src="http://blog.aheritier.net/wp-content/uploads/2009/11/maventxt_logo_200.png" alt="Apache Maven" title="Apache Maven" width="200" height="53" class="alignright size-full wp-image-696" />Apache Maven</a> permet nativement de découper un projet en sous-modules. Chaque module est un élément autonome avec son propre cycle de vie. Maven utilise ce que l&#8217;on appel le &#8220;reactor&#8221; pour orchestrer dans un projet l&#8217;appel des différents modules en fonction de leurs dépendances.</p>
<p>Le concept de module, permet d&#8217;affiner la granularité des livrables et de rendre plus flexible et évolutive l&#8217;architecture de l&#8217;application. Cependant lorsque le nombre de modules d&#8217;un projet augmente cela va souvent de pair avec le nombre de lignes de code, de tests et de packages à créer. La construction du projet prend donc de plus en plus de temps à en devenir un frein pour la productivité du développeur <em>(moi je ne trouve rien de plus énervant lorsque je développe que de devoir attendre que ma machine me rende la main)</em>.</p>
<p><a href="http://lescastcodeurs.com/" target="_blank"><img src="http://lescastcodeurs.com/img/entendu_sur_castcodeurs_200px.png" alt="Entendu sur Les Cast Codeurs" class="alignright size-full"/></a>Il existe pourtant des fonctionnalités du &#8220;reactor&#8221; qui permettent à Maven de contrôler finement quels sont les modules d&#8217;un projet sur lesquels on souhaite appeler un traitement. Même si elles existent depuis près de deux ans, ces fonctionnalités sont encore peu connues et utilisées malgré leurs utilités indéniables (faute à la documentation ?). Ce billet illustre mes rapides explications de <a href="http://lescastcodeurs.com/2010/04/les-cast-codeurs-podcast-episode-20-oracle-je-taime-moi-non-plus-et-linvasion-des-lapins/">l&#8217;épisode 20 du podcast Les Cast Codeurs</a>. Il détaille l&#8217;utilisation de 4 options de la ligne de commande pour Maven 2.1 et versions ultérieures. Vous pouvez très bien faire la même chose avec le <a href="http://maven.apache.org/plugins/maven-reactor-plugin/" target="_blank">plugin reactor</a> et les versions 2.0.x de Maven mais il faudra taper sur plus de touches de votre clavier car la syntaxe est bien moins synthétique.<br />
<span id="more-977"></span></p>
<h1>Le projet exemple</h1>
<p><img src="http://blog.aheritier.net/wp-content/uploads/2010/04/Pom-Reactor-min.png" alt="Le Projet" title="Le Projet" width="307" height="258" class="alignright" /><br />
Pour illustrer l&#8217;article je prend volontairement un projet simple sans complexité dans les dépendances entre les modules.<br />
Ce projet est composé de 6 sous-modules (A à F) avec les dépendances suivantes </p>
<ul>
<li>Module F dépend de Module E,</li>
<li>Module E dépend de Module D,</li>
<li>Module D dépend de Module C,</li>
<li>Module C dépend de Module B,</li>
<li>Module B dépend de Module A.</li>
</ul>
<p>Dans cet article j&#8217;utilise le verbe &#8220;construire&#8221; pour nommer une exécution Maven sur un module/projet mais il faut se rappeler que Maven fait bien plus que cela nativement : exécution des tests, génération de site web, etc. Ces options s&#8217;appliquent à n&#8217;importe quelle phase ou plugin que l&#8217;on souhaite appeler sur le projet.</p>
<table style="width:100%">
<tr>
<td>
<p>
<strong>A noter</strong> que les commandes Maven doivent être impérativement appelées depuis le projet principal où sont déclarés tous les modules afin qu&#8217;il connaisse le graphe complet de l&#8217;exécution des modules et n&#8217;extrait que les parties qui vous intéressent.<br />
Dans notre exemple, compte tenu des dépendances entre modules, une exécution complète de Maven va suivre l&#8217;ordre alphabétique.
</p>
<pre>arnaud@mbp-arnaud:~$ mvn install
[INFO] ------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Project ....................... SUCCESS [2.132s]
[INFO] ModuleA ....................... SUCCESS [5.574s]
[INFO] ModuleB ....................... SUCCESS [0.455s]
[INFO] ModuleC ....................... SUCCESS [0.396s]
[INFO] ModuleD ....................... SUCCESS [0.462s]
[INFO] ModuleE ....................... SUCCESS [0.723s]
[INFO] ModuleF ....................... SUCCESS [0.404s]
[INFO]
</pre>
</td>
<td style="width:310px">
<img src="http://blog.aheritier.net/wp-content/uploads/2010/04/Reactor-min.png" alt="Reactor" title="Reactor" width="308" height="393" />
</td>
</tr>
</table>
<h1>Sélectionner les modules à construire. L&#8217;option -pl.</h1>
<p><code>arnaud@mbp-arnaud:~$ mvn --help<br />
usage: mvn [options] [&lt;goal (s)&gt;] [&lt;phase (s)&gt;]<br />
Options:<br />
...<br />
 -pl,--projects &lt;arg&gt;                   Build specified reactor projects<br />
                                        instead of all projects<br />
...<br />
</code><br />
Cette option permet de choisir spécifiquement les modules du projet à construire. Cela évite de naviguer de répertoire en répertoire pour lancer chaque module ou d&#8217;utiliser plusieurs lancements successifs avec l&#8217;option &#8220;-f chemin_vers_un_pom.xml&#8221;. Cela vous fait gagner aussi du temps en évitant de charger Maven et la JVM plusieurs fois. Enfin le fait que Maven utilise son &#8220;reactor&#8221;, c&#8217;est lui qui ordonne les modules en fonctions des dépendances et ça n&#8217;est pas à vous de faire ce calcule.<br />
La liste de modules est séparée par des virgules. Pour identifier chaque module, nous pouvons soit utiliser son chemin relatif par rapport à la racine du projet soit son artifactId.</p>
<table style="width:100%">
<tr>
<td>
<code>arnaud@mbp-arnaud:~$ mvn install –pl moduleE,moduleB<br />
[INFO] -------------------------------------------<br />
[INFO] Reactor Summary:<br />
[INFO]<br />
[INFO] ModuleB .................. SUCCESS [2.774s]<br />
[INFO] ModuleE .................. SUCCESS [1.008s]<br />
[INFO]<br />
</code><br />
Dans note exemple nous demandons à Maven d&#8217;executer le cycle de vie jusqu&#8217;à la phase &#8220;install&#8221; pour les modules E et B. Maven calcule automatiquement l&#8217;ordre et construits le module B puis le module E.
</td>
<td style="width:310px">
<img src="http://blog.aheritier.net/wp-content/uploads/2010/04/reactor-pl-min.png" alt="Reactor avec liste de modules" title="Reactor avec liste de modules" width="308" height="393" class="size-full wp-image-985" />
</td>
</tr>
</table>
<h1>Construire tous les modules impactant la construction d&#8217;une liste de modules. L&#8217;option -am</h1>
<p><code>arnaud@mbp-arnaud:~$ mvn --help<br />
usage: mvn [options] [&lt;goal (s)&gt;] [&lt;phase (s)&gt;]<br />
Options:<br />
 -am,--also-make                        If project list is specified, also<br />
                                        build projects required by the<br />
                                        list<br />
...<br />
</code><br />
Cette option s&#8217;utilise conjointement à l&#8217;option -pl. En plus de construire les modules demandés par l&#8217;option -pl, Maven va construire tous les modules nécessaires à ceux-ci (donc ceux qui apparaissent dans leurs dépendances).</p>
<table style="width:100%">
<tr>
<td>
<code>arnaud@mbp-arnaud:~$ mvn install –pl moduleD -am<br />
[INFO] ------------------------------------------<br />
[INFO] Reactor Summary:<br />
[INFO]<br />
[INFO] ModuleA ................. SUCCESS [4.075s]<br />
[INFO] ModuleB ................. SUCCESS [0.468s]<br />
[INFO] ModuleC ................. SUCCESS [0.354s]<br />
[INFO] ModuleD ................. SUCCESS [0.384s]<br />
[INFO]<br />
</code><br />
<strong>Cas d&#8217;usage : </strong>Imaginons que vous développiez une application JEE avec de nombreux JARs, quelques WARs et EARs. Si vous travaillez sur un war en particulier et que vous êtes capable de ne déployer que ce dernier pour tester vos développements, vous n&#8217;avez pas besoin de reconstruire tout votre projet. Demandez à Maven de reconstruire que les modules nécessaires à la construction du WAR en passant ce dernier en paramètre de l&#8217;option -pl et en ajoutant l&#8217;option -am.<br />
<code>mvn install –pl monWAR -am</code>
</td>
<td style="width:310px">
<img src="http://blog.aheritier.net/wp-content/uploads/2010/04/reactor-pl-am-min.png" alt="Reactor avec dépendances des modules" title="Reactor avec dépendances du module" width="308" height="393" class="size-full wp-image-986" />
</td>
</tr>
</table>
<h1>Construire tous les modules impactés par la construction d&#8217;une liste de module. L&#8217;option -amd</h1>
<p><code>arnaud@mbp-arnaud:~$ mvn --help<br />
usage: mvn [options] [&lt;goal (s)&gt;] [&lt;phase (s)&gt;]<br />
Options:<br />
...<br />
 -amd,--also-make-dependents            If project list is specified, also<br />
                                        build projects that depend on<br />
                                        projects on the list<br />
...<br />
</code><br />
Cette option s&#8217;utilise conjointement à l&#8217;option -pl. En plus de construire les modules demandés par l&#8217;option -pl, Maven va construire tous les modules qui dépendent de ces derniers.</p>
<table style="width:100%">
<tr>
<td>
<code>arnaud@mbp-arnaud:~$ mvn install –pl moduleD -amd<br />
[INFO] ------------------------------------------<br />
[INFO] Reactor Summary:<br />
[INFO]<br />
[INFO] ModuleD ................. SUCCESS [4.881s]<br />
[INFO] ModuleE ................. SUCCESS [0.478s]<br />
[INFO] ModuleF ................. SUCCESS [0.427s]<br />
[INFO]<br />
</code><br />
<strong>Cas d&#8217;usage : </strong>Vous travaillez sur un module et vous voulez vérifier que vos modifications n&#8217;impactent pas les autres modules qui l&#8217;utilisent. Vous demandez donc à Maven de reconstruire ce module (-pl monModule) et tous ceux qui l&#8217;utilisent (-amd). Ainsi la compilation et les tests des autres modules valideront vos changements.<br />
<code>mvn install –pl monModule -amd</code>
</td>
<td style="width:310px">
<img src="http://blog.aheritier.net/wp-content/uploads/2010/04/reactor-pl-amd-min.png" alt="Reactor avec modules dépendants" title="Reactor avec modules dépendants" width="308" height="393" class="alignright size-full wp-image-987" />
</td>
</tr>
</table>
<h1>Reprennez où vous voulez. L&#8217;option -rf</h1>
<p><code>arnaud@mbp-arnaud:~$ mvn --help<br />
usage: mvn [options] [@lt;goal (s)&gt;] [&lt;phase (s)&gt;]<br />
Options:<br />
...<br />
 -rf,--resume-from &lt;arg&gt;                Resume reactor from specified<br />
                                        project<br />
...<br />
</code><br />
Cette option permet de reprendre à un point donné (un module) l&#8217;ensemble de la construction du projet. Tout comme l&#8217;option -pl, le module passé en paramètre de l&#8217;option -rf est identifié à partir de son chemin relatif ou de son artifactId.</p>
<table style="width:100%">
<tr>
<td>
<code>arnaud@mbp-arnaud:~$ mvn install –rf moduleD<br />
[INFO] ------------------------------------------<br />
[INFO] Reactor Summary:<br />
[INFO]<br />
[INFO] ModuleD ................. SUCCESS [9.707s]<br />
[INFO] ModuleE ................. SUCCESS [0.625s]<br />
[INFO] ModuleF ................. SUCCESS [0.679s]<br />
[INFO] Project ................. SUCCESS [2.467s]<br />
[INFO]<br />
</code><br />
<strong>Cas d&#8217;usage : </strong>Vous travaillez sur votre projet et vous voulez le reconstruire entièrement pour valider vos changements. Vous lancez la construction et elle échoue dans le module D. Vous trouvez le problème et corrigez le module D erroné. A quoi bon relancer la construction complète alors que vous savez que les modules construits avant le module D n&#8217;ont pas été modifiés et ne peuvent pas être affecté par votre modification. Vous demandez donc à Maven de relancer toute la construction à partir du module D.<br />
<code>mvn install –rf moduleD</code>
</td>
<td style="width:310px">
<img src="http://blog.aheritier.net/wp-content/uploads/2010/04/reactor-pl-amd-min.png" alt="Reactor avec démarage depuis un module" title="Reactor avec démarage depuis un module" width="308" height="393" class="alignright size-full wp-image-987" />
</td>
</tr>
</table>
<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=9.9" /></div><div>Rating: 9.9/<strong>10</strong> (9 votes cast)</div><br />]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/construire-moins-pour-aller-plus-vite/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>En manque de chocolat &#8230;</title>
		<link>http://blog.aheritier.net/en-manque-de-chocolat/</link>
		<comments>http://blog.aheritier.net/en-manque-de-chocolat/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 21:14:47 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Apache Maven]]></category>
		<category><![CDATA[Communauté]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java User Group]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=960</guid>
		<description><![CDATA[&#8230; je n&#8217;ai pas d&#8217;autre choix que de retourner en Suisse me réapprovisionner. Après les sessions à l&#8217;AlpesJUG et GenevaJUG de la semaine dernière, je m&#8217;en retourne ce jeudi soir à Lausanne présenter Maven en général et sa troisième version &#8230; <a href="http://blog.aheritier.net/en-manque-de-chocolat/">Continuer la lecture <span class="meta-nav">&#8594;</span></a><br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=10.0" /></div><div>Rating: 10.0/<strong>10</strong> (1 vote cast)</div><br />]]></description>
			<content:encoded><![CDATA[<p><a href="http://jugl.ch"><img src="http://blog.aheritier.net/wp-content/uploads/2010/04/jugl-logo_transp_small2.png" alt="" title="JUG Lausanne" width="153" height="101" class="alignright size-full wp-image-965" /></a>&#8230; je n&#8217;ai pas d&#8217;autre choix que de retourner en Suisse me réapprovisionner.<br />
Après les sessions à <a href="http://www.alpesjug.fr/?p=249">l&#8217;AlpesJUG</a> et <a href="http://www.genevajug.ch/">GenevaJUG</a> de la semaine dernière, je m&#8217;en retourne ce jeudi soir à <a href="http://jugl.ch">Lausanne</a> présenter <a href="http://jugl.ch/xwiki/bin/view/Main/Prochaines+Réunions">Maven en général et sa troisième version majeure en particulier</a>.</p>
<p><span id="more-960"></span></p>
<p>Comme de coutume j&#8217;ai bien plus de slides et de contenu que le temps imparti. J&#8217;essaierai donc de spécialiser la session en fonction des attentes de l&#8217;auditoire présent.<br />
Au menu nous pourrons aborder différents thèmes comme :<br />
<img src="http://blog.aheritier.net/wp-content/uploads/2010/04/toblerone-150x150.jpg" alt="" title="toblerone" width="150" height="150" class="alignright size-thumbnail wp-image-964" /></p>
<ul>
<li>Son histoire, un tour d&#8217;horizon du produit, ses différentes fonctionnalités et son positionnement par rapport à la concurrence,</li>
<li>Son ecosystem, comme les gestionnaires de référentiels de binaires, les serveurs d&#8217;intégration continue, les tableaux de bord qualité, l&#8217;IDE,</li>
<li>Les bonnes et mauvaises pratiques d&#8217;utilisation,</li>
<li>Quelques cas d&#8217;usages méconnus (sécurisation des passwords, release d&#8217;un projet, options du réacteur),</li>
<li>Retour vers le futur, que nous réserve Maven 3.x.</li>
</ul>
<p>N&#8217;oubliez pas de vous <a href="http://www.jugevents.org/jugevents/event/show.html?id=25730">inscrire</a> et rejoignez-nous nombreux !!</p>
<p><b>MAJ 13 Avril 2010</b> : Voici les slides de la présentation. Une fois de plus ceux-ci ont été mis à jour depuis la <a href="http://blog.aheritier.net/presentations-maven-3-a-lalpesjug-et-au-genevajug/" title="Présentations Maven (3) à l’AlpesJUG et au GenevaJUG" >précédente présentation à Genève</a>.<br />
<iframe src="http://www.slideshare.net/slideshow/embed_code/3699570" width="650" height="526" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe><br/><br/></p>
<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=10.0" /></div><div>Rating: 10.0/<strong>10</strong> (1 vote cast)</div><br />]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/en-manque-de-chocolat/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Présentations Maven (3) à l&#8217;AlpesJUG et au GenevaJUG</title>
		<link>http://blog.aheritier.net/presentations-maven-3-a-lalpesjug-et-au-genevajug/</link>
		<comments>http://blog.aheritier.net/presentations-maven-3-a-lalpesjug-et-au-genevajug/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 22:25:27 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Apache Maven]]></category>
		<category><![CDATA[Communauté]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java User Group]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=910</guid>
		<description><![CDATA[La semaine prochaine je reprends ma tournée des JUGs francophones pour vous parler de Maven à Grenoble et à Genève. Je serai, lundi soir, le 29 Mars à l&#8217;AlpesJUG, à Grenoble. L&#8217;accueil aura lieu à partir de 18H30 dans l’amphithéâtre &#8230; <a href="http://blog.aheritier.net/presentations-maven-3-a-lalpesjug-et-au-genevajug/">Continuer la lecture <span class="meta-nav">&#8594;</span></a><br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=10.0" /></div><div>Rating: 10.0/<strong>10</strong> (1 vote cast)</div><br />]]></description>
			<content:encoded><![CDATA[<p><a href="http://maven.apache.org"><img src="http://blog.aheritier.net/wp-content/uploads/2009/06/maventxt_logo_200.png" alt="" title="maventxt_logo_200" width="200" height="53" class="alignright size-full wp-image-568" /></a>La semaine prochaine je reprends ma tournée des JUGs francophones pour vous parler de Maven à Grenoble et à Genève.<br />
<span id="more-910"></span><br />
<a href="http://www.alpesjug.fr"><img src="http://blog.aheritier.net/wp-content/uploads/2010/03/LogoAlpesJuggy.png" alt="" title="LogoAlpesJuggy" width="108" height="117" class="alignleft size-full wp-image-923" /></a><br />
 Je serai, lundi soir, <a href="http://www.alpesjug.fr/?p=187">le 29 Mars à l&#8217;AlpesJUG</a>, à Grenoble. L&#8217;accueil aura lieu à partir de 18H30 dans <a href="http://ensimag.grenoble-inp.fr/adminsite/photo.jsp?ID_PHOTO=1200660700685">l’amphithéâtre E de l&#8217;ENSIMAG, rue de la Chimie</a>. La conférence débutera à 19H00. La soirée se terminera par un diner au restaurant <a href="http://doodle.com/rfc9iwwd5ywchhmu">La Charbonnade, 10 Rue Marcel Porte, 38000 Grenoble</a> (04 76 47 43 07‎).  N&#8217;oubliez pas de vous inscrire pour la <a href="http://www.jugevents.org/jugevents/event/24851">présentation</a> et pour le <a href="http://doodle.com/rfc9iwwd5ywchhmu">restaurant</a>, les places sont limitées.</p>
<p><a href="http://www.genevajug.ch/"><img src="http://blog.aheritier.net/wp-content/uploads/2010/03/LogoGenevaJuggy.png" alt="" title="LogoGenevaJuggy" width="200" height="117" class="alignright size-full wp-image-914" /></a><br />
Le lendemain, mardi 30 Mars je serai en Suisse au <a href="http://www.genevajug.ch">GenevaJUG</a>. Dépéchez-vous de vous <a href="http://www.jugevents.org/jugevents/event/24908">inscrire</a>, il ne reste déjà plus que 10 places. La présentation aura lieu <a href="http://maps.google.ch/maps?f=q&#038;source=s_q&#038;hl=fr&#038;geocode=&#038;q=+rue+du+Général-Dufour+24,+1204+Genève&#038;sll=46.362093,9.036255&#038;sspn=5.996937,9.876709&#038;ie=UTF8&#038;hq=&#038;hnear=Rue+du+Général+Dufour+24,+1204+Genève&#038;ll=46.19958,6.143095&#038;spn=0.005874,0.009645&#038;z=17">salle U259 à l&#8217;Uni-Dufour</a> à partir de 18h30 et sera aussi suivi d&#8217;un diner.</p>
<p>Lors de ces présentations nous aborderons comment Maven intervient pour chacune de ces étapes:</p>
<ul>
<li>le build du projet sur le poste du développeur</li>
<li>la gestion des dépendances et des dépôts</li>
<li>la mise en place de l’intégration continue</li>
<li>l’utilisation des métriques et des rapports de qualité</li>
<li>le déploiement continu</li>
</ul>
<p>Je reviendrai aussi sur les nouveautés à attendre de Maven 3 qui sera la prochaine version majeure et qui verra le jour dans quelques mois (pas folle la guêpe, elle reste vague <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).</p>
<p>En fonction de l&#8217;auditoire et de son niveau de connaissances sur Maven j&#8217;adapterai le contenu et la durée de la séance de questions/réponses. &#8220;C&#8217;est vous qui voyez&#8221; comme dirait <a href="http://www.dailymotion.com/video/x1eqf7_c-est-vous-qui-voyez-laspalès_fun">Laspalès</a>.</p>
<p>D&#8217;autres sessions sont dores et déjà planifiées dans plusieurs JUG, et je vous en parlerai plus en détail d&#8217;ici peu :</p>
<ul>
<li><a href="http://jugl.ch/xwiki/bin/view/Main/WebHome">LausanneJUG</a> le 8 avril,</li>
<li><a href="http://www.rivierajug.org/xwiki/bin/view/Main/201004%2Dbuild">RivieraJUG</a> (Nice) le 20 Avril,</li>
<li><a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20100511">ParisJUG</a> le 11 Mai,</li>
<li><a href="http://lorrainejug.blogspot.com/">LorraineJUG</a> le 1 juin.</li>
</ul>
<p><strong>Mise à jour (23 Mars) :</strong> J&#8217;ai oublié de préciser qu&#8217;une librairie partenaire du GenevaJUG devrait proposer à la vente sur place notre livre <a href="http://blog.aheritier.net/publications/" title="Publications" >&#8220;Apache Maven&#8221;</a>.</p>
<p><strong>Mise à jour N°2 (23 Mars) :</strong> : La salle pour l&#8217;AlpesJUG à changé. La session aura lieu <a href="http://ensimag.grenoble-inp.fr/adminsite/photo.jsp?ID_PHOTO=1200660700685">dans l’amphithéâtre E de l&#8217;ENSIMAG, rue de la Chimie</a>.</p>
<p><strong>Mise à jour N°3 (30 Mars) :</strong> : Ci-dessous la présentation au AlpesJUG<br />
<iframe src="http://www.slideshare.net/slideshow/embed_code/3592401" width="650" height="526" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe><br/><br/></p>
<p><strong>Mise à jour N°4 (1 Avril) :</strong> : Ci-dessous la présentation au GenevaJUG (quelques ajouts/modifications/corrections)<br />
<iframe src="http://www.slideshare.net/slideshow/embed_code/3606058" width="650" height="526" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe><br/><br/><br />
et les <a href="http://picasaweb.google.fr/xavierbourguignon/GenevaJUGMaven30032010?feat=directlink">photos</a>.</p>
<p><strong>Mise à jour N°5 (7 Avril) :</strong> : Une superbe retranscription de ma session au GenevaJUG pour tous ceux qui n&#8217;ont pas eu la chance d&#8217;avoir pu venir  : <a href="http://waves.inagua.ch/2010/04/06/3e-geneva-jug-maven/">http://waves.inagua.ch/2010/04/06/3e-geneva-jug-maven/</a></p>
<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=10.0" /></div><div>Rating: 10.0/<strong>10</strong> (1 vote cast)</div><br />]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/presentations-maven-3-a-lalpesjug-et-au-genevajug/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Maven Release Plugin 2.0</title>
		<link>http://blog.aheritier.net/maven-release-plugin-2-0/</link>
		<comments>http://blog.aheritier.net/maven-release-plugin-2-0/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 02:00:59 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Apache Maven]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=845</guid>
		<description><![CDATA[Après 9 beta la version 2.0 du plugin release est enfin disponible. Les derniers coups de tournevis apportés à ce dernier devraient en ravir plus d&#8217;un !! Le plug-in supporte désormais les projets en structure &#8220;flat&#8221; ou aussi nommée &#8220;en &#8230; <a href="http://blog.aheritier.net/maven-release-plugin-2-0/">Continuer la lecture <span class="meta-nav">&#8594;</span></a><br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>10</strong> (0 votes cast)</div><br />]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.aheritier.net/wp-content/uploads/2009/06/maventxt_logo_200.png"><img src="http://blog.aheritier.net/wp-content/uploads/2009/06/maventxt_logo_200.png" alt="" title="maventxt_logo_200" width="200" height="53" class="alignright size-full wp-image-568" /></a>Après 9 beta la version 2.0 du plugin release est enfin disponible. Les derniers coups de tournevis apportés à ce dernier devraient en ravir plus d&#8217;un !!<br />
<span id="more-845"></span></p>
<ul>
<li><strong>Le plug-in supporte désormais les projets en structure &#8220;flat&#8221; ou aussi nommée &#8220;en râteau&#8221;</strong>. Pour ces projets ( pour diverses bonnes ou moins bonnes raisons ) le POM parent n&#8217;est pas en même temps le réacteur des sous modules. Le parent est un sous-module à part entière. Jusqu&#8217;à présent le plug-in release ne fonctionnait pas sur ce type de projet. C&#8217;est enfin une chose corrigée.</li>
<li><strong>Les bugs les plus récalcitrants du goal branch sont corrigés.</strong> Vous pouvez utiliser ce dernier par exemple pour créer une branche depuis le trunk avant de faire la release pour passer sur une branche dite de stabilisation. Ou alors vous pouvez créer la branche depuis un tag pour créer une branche de maintenance de la version en question. Dans tous les cas le plugin prend en charge la modification des versions dans les POMs, chose que l&#8217;on sait bien ennuyeuse (et dangereuse) à faire à la main.</li>
<li><strong>Le plug-in release contrôle à nouveau correctement les modifications locales (fichiers modifiés ou ajoutés et non commités) avant de démarrer le processus de release ou de création d&#8217;une branche.</strong> Cette fonctionnalité était buggée depuis la version 2.0-beta-8 (cf. <a href="http://jira.codehaus.org/browse/MRELEASE-481">MRELEASE-481</a>).</li>
<li>Enfin, je pense qu&#8217;il s&#8217;agit de la correction la plus attendue de tous : <strong>Il n&#8217;est plus nécessaire pendant la phase de préparation d&#8217;installer les artifacts du projet dans le repository local.</strong> A l&#8217;origine, lié à un problème dans le noyau de Maven, Il était très souvent nécessaire de configurer le goal <code>prepare</code> du plugin pour faire une installation des artifacts plutot qu&#8217;une vérification sans quoi la release échouait faute de trouver les dépendances entre modules. Cela avait les désavantages de couter du temps (le packaging de gros artifacts comme des WARs ou EARs prend beaucoup de temps au niveau du build à cause de l&#8217;utilisation intensive des IOs de la machine) et surtout de pouvoir produire lors de cette phase qu&#8217;une partie des binaires de la version en cours de release si cette dernière echouait. C&#8217;est pour cela que la phase <code>prepare</code> ne doit faire qu&#8217;exécuter les tests sans créer les binaires et si tout se passe bien c&#8217;est la phase <strong>perform</strong> qui générera ces derniers. Ceci est désormais rentré dans le bon ordre et suit l&#8217;idée d&#8217;origine du plugin (la fameuse raison des deux phases).</li>
</ul>
<p>La <a href="http://maven.apache.org/plugins/maven-release-plugin/">documentation du plugin</a> est à jour. Vous pouvez retrouver le détail des modifications dans la <a href="http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=11144&#038;styleName=Html&#038;version=15113">Release Note de cette version</a>.</p>
<p><strong>Bonne release à tous !!</strong></p>
<p><em>Question aux produits concurrents : Vous faites comment pour offrir ce service à vos utilisateurs ?</em></p>
<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>10</strong> (0 votes cast)</div><br />]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/maven-release-plugin-2-0/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>N&#8217;utilisez pas Hudson 1.344 !!</title>
		<link>http://blog.aheritier.net/nutilisez-pas-hudson-1-344/</link>
		<comments>http://blog.aheritier.net/nutilisez-pas-hudson-1-344/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 07:25:24 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Hudson]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=874</guid>
		<description><![CDATA[Je vous aurai prévenu J&#8217;ai découvert un bug bloquant (http://issues.hudson-ci.org/browse/HUDSON-5536) qui corrompt les données locales. Ainsi même un retour en arrière sur la version d&#8217;Hudson ne vous corrige pas le problème. La correction manuelle à faire sur les fichiers Hudson &#8230; <a href="http://blog.aheritier.net/nutilisez-pas-hudson-1-344/">Continuer la lecture <span class="meta-nav">&#8594;</span></a><br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>10</strong> (0 votes cast)</div><br />]]></description>
			<content:encoded><![CDATA[<p>Je vous aurai prévenu <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <a href="http://blog.aheritier.net/wp-content/uploads/2010/02/butler.png"><img src="http://blog.aheritier.net/wp-content/uploads/2010/02/butler.png" alt="" title="butler" width="96" height="96" class="alignright size-full wp-image-875" /></a><br />
J&#8217;ai découvert un bug bloquant (<a href="http://issues.hudson-ci.org/browse/HUDSON-5536">http://issues.hudson-ci.org/browse/HUDSON-5536</a>) qui corrompt les données locales. Ainsi même un retour en arrière sur la version d&#8217;Hudson ne vous corrige pas le problème. La correction manuelle à faire sur les fichiers Hudson est décrite dans l&#8217;issue Jira si par malchance vous avez déjà fait l&#8217;upgrade et que comme moi vous vous retrouvez avec tous vos builds KO.<br />
L&#8217;équipe va probablement sortir une version 1.345 en urgence dans les heures à venir.<br />
Merci à <a href="http://andrewbayer.com/">Andrew Bayer</a> (<a href="http://twitter.com/abayer">@abayer</a> sur twitter) pour son coup de main.</p>
<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>10</strong> (0 votes cast)</div><br />]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/nutilisez-pas-hudson-1-344/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Et une bougie de plus !!</title>
		<link>http://blog.aheritier.net/et-une-bougie-de-plus/</link>
		<comments>http://blog.aheritier.net/et-une-bougie-de-plus/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 03:00:31 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Communauté]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java User Group]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=855</guid>
		<description><![CDATA[En ces temps moroses pour la communauté Java où le bulldozer Oracle écrase, petit à petit, feu SUN Microsystems, je me réjoui de voir que les Javaïstes n&#8217;ont jamais été aussi rassemblés qu&#8217;aujourd&#8217;hui !! La France n&#8217;est pas en reste &#8230; <a href="http://blog.aheritier.net/et-une-bougie-de-plus/">Continuer la lecture <span class="meta-nav">&#8594;</span></a><br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>10</strong> (0 votes cast)</div><br />]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.aheritier.net/wp-content/uploads/2010/02/juggyannif02.jpg"><img src="http://blog.aheritier.net/wp-content/uploads/2010/02/juggyannif02-150x150.jpg" alt="" title="juggyannif02" width="150" height="150" class="alignright size-thumbnail wp-image-856" /></a><br />
En ces temps moroses pour la communauté Java où le bulldozer <a href="http://www.oracle.com">Oracle</a> écrase, petit à petit, feu <a href="http://www.sun.com">SUN Microsystems</a>, je me réjoui de voir que les Javaïstes n&#8217;ont jamais été aussi rassemblés qu&#8217;aujourd&#8217;hui !! La France n&#8217;est pas en reste de ce mouvement avec un nombre impressionnant de Java Users Groups nés en deux ans.<br />
<span id="more-855"></span><br />
Ce mardi 9 février toute la communauté fêtera dignement <a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20100209">les deux ans du père de tous les JUGs français : Le ParisJUG</a> !!<br />
Encore un grand bravo à toute l&#8217;équipe qui a su mener à bien cette quête qui n&#8217;a pas été facile tous les jours. Présent dès la première réunion j&#8217;avoue que c&#8217;est à chaque fois un grand bonheur de tous vous y retrouver.<br />
Alors si vous ne savez pas encore quoi faire demain soir, ne cherchez plus !!<br />
Le thème de la soirée sera l&#8217;open-source en France. Vous y retrouverez de nombreuses micro-sessions des acteurs de l&#8217;open-source Français : <a href="http://www.obeo.fr/">Obeo</a>, <a href="http://www.xwiki.org">XWiki</a>, <a href="http://www.jmdoudoux.fr/java/dej/indexavecframes.htm">Développons en Java</a>, <a href="http://jcaptcha.sourceforge.net/">jCaptcha</a>, <a href="http://www.lunatech-labs.com/open-source/jax-doclets">jax-doclets</a>, <a href="http://www.playframework.org/">Play! framework</a> et le meilleur de tous, <a href="http://www.exoplatform.com">eXo Platform</a> (Quoi ? Je ne suis pas objectif ? )<br />
La keynote sera présentée par <a href="http://sacha.labourey.com/">Sacha Labourey</a>, ex-CTO de <a href="http://www.jboss.org">JBoss</a>, que j&#8217;ai rencontré il y a peu (Il fait parti du Board of Advisors d&#8217;<a href="http://www.exoplatform.com">eXo Platform</a>). C&#8217;est une personne vraiment super sympathique et très intéressante. Je vous invite sincèrement à faire sa connaissance.</p>
<p>Courrez immédiatement vous <a href="http://www.jugevents.org/jugevents/event/23793">inscrire</a> si ça n&#8217;est pas déjà fait car même si la salle est beaucoup plus grande que d&#8217;habitude, les places partent vites !!<br />
Je vous conseil aussi vivement de vous <a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20100209Cocktail">inscrire pour la 3eme mi-temps</a> (aka cocktail dinatoire), car c&#8217;est un moment privilégié pour rencontrer et discuter avec toutes les personnes de la communauté.</p>
<p>A mon grand regret, pour cause de déplacement professionnel, je ne pourrai pas être des vôtres puisque je suis à 9000Km de là, à Hanoï. Je suivrai cependant avec plaisir la soirée depuis la <a href="https://wave.google.com/wave/#restored:search:paris+jug,restored:wave:googlewave.com!w%252B4YDtT1O2A">Wave Google</a> (pour une fois que Google Wave va peut être enfin me servir à quelque chose). Pour tous ceux qui auraient eu la bonne idée d&#8217;acheter notre livre <a href="http://blog.aheritier.net/publications/" title="Publications" >Apache Maven</a>, sachez que <a href="http://blog.loof.fr/">Nicolas De loof</a>, mon co-auteur, sera là et qu&#8217;il adore faire des dédicaces !!</p>
<p><img src="http://blog.aheritier.net/wp-content/uploads/2010/02/sun.jpg" alt="" title="sun" width="150" height="100" class="alignright size-full wp-image-872" />Je terminerai en remerciant publiquement une dernière fois SUN Microsystems pour tout ce qu&#8217;ils ont pu apporter à Java. La communauté n&#8217;a pas toujours été tendre avec eux et pourtant qui aime bien châtie bien. La communauté Java n&#8217;en ressortira que plus forte et plus soudée pour se faire entendre du géant <a href="http://www.oracle.com">Oracle</a>.</p>
<p><strong>Signé :</strong> <em><a href="http://blog.oxiane.com/2010/02/07/le-paris-jug-a-deux-ans">Le mec au simple polo fatigué, baskets, et moyennement rasé.</a></em> <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://blog.aheritier.net/wp-content/uploads/2010/02/SunRIP.jpg"><img src="http://blog.aheritier.net/wp-content/uploads/2010/02/SunRIP-300x234.jpg" alt="" title="SunRIP" width="300" height="234" class="aligncenter size-medium wp-image-857" /></a></p>
<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>10</strong> (0 votes cast)</div><br />]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/et-une-bougie-de-plus/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

