<?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>romain.getBlog( ); &#187; article</title>
	<atom:link href="http://linsolas.free.fr/wordpress/index.php/category/article/feed/" rel="self" type="application/rss+xml" />
	<link>http://linsolas.free.fr/wordpress</link>
	<description></description>
	<lastBuildDate>Wed, 23 Jan 2013 21:29:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Redirection&#8230;</title>
		<link>http://linsolas.free.fr/wordpress/index.php/2012/11/redirection/</link>
		<comments>http://linsolas.free.fr/wordpress/index.php/2012/11/redirection/#comments</comments>
		<pubDate>Sun, 18 Nov 2012 13:11:34 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[article]]></category>

		<guid isPermaLink="false">http://linsolas.free.fr/wordpress/?p=288</guid>
		<description><![CDATA[Ce blog ne sera sans doute plus maintenu, compte tenu des difficultés à le faire vivre sur les pages perso de Free. Ma nouvelle version du blog est donc hébergée par GitHub Pages, propulsé par Octopress ! Ca se passe ici -> http://linsolas.github.com/]]></description>
			<content:encoded><![CDATA[<p>Ce blog ne sera sans doute plus maintenu, compte tenu des difficultés à le faire vivre sur les pages perso de Free.<br />
Ma nouvelle version du blog est donc hébergée par GitHub Pages, propulsé par <a href="http://www.octopress.org" onclick="pageTracker._trackPageview('/outgoing/www.octopress.org?referer=');">Octopress</a> !</p>
<p>Ca se passe ici -> <a href="http://linsolas.github.com/" onclick="pageTracker._trackPageview('/outgoing/linsolas.github.com/?referer=');">http://linsolas.github.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://linsolas.free.fr/wordpress/index.php/2012/11/redirection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Calculer sa couverture de code par les tests d&#8217;intégration</title>
		<link>http://linsolas.free.fr/wordpress/index.php/2011/07/calculer-sa-couverture-de-code-par-les-tests-dintegration/</link>
		<comments>http://linsolas.free.fr/wordpress/index.php/2011/07/calculer-sa-couverture-de-code-par-les-tests-dintegration/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 08:07:20 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[sonar]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://linsolas.free.fr/wordpress/?p=159</guid>
		<description><![CDATA[Nous allons voir ici comment, grâce à Sonar, Maven et JaCoCo nous pouvons obtenir la couverture de code par des tests d&#8217;intégration. Contexte Dans mon exemple, je me baserais sur les outils suivants : Sonar 2.8, Maven 2.2.1, Java 1.6. Au sein de l&#8217;un de mes projets, je dispose de quelques rares tests unitaires, qui [...]]]></description>
			<content:encoded><![CDATA[<p>Nous allons voir ici comment, grâce à Sonar, Maven et JaCoCo nous pouvons obtenir la couverture de code par des tests d&#8217;intégration.</p>
<p><span id="more-159"></span></p>
<h2>Contexte</h2>
<p>Dans mon exemple, je me baserais sur les outils suivants : <a href="http://www.sonarsource.org/" onclick="pageTracker._trackPageview('/outgoing/www.sonarsource.org/?referer=');">Sonar 2.8</a>, <a href="http://maven.apache.org" onclick="pageTracker._trackPageview('/outgoing/maven.apache.org?referer=');">Maven 2.2.1</a>, Java 1.6.</p>
<p>Au sein de l&#8217;un de mes projets, je dispose de quelques rares tests unitaires, qui couvre environ 7% de l&#8217;application. C&#8217;est peu. Très peu. Trop peu même.<br />
Mais nous avons également des tests d&#8217;intégration.<br />
En gros, ces tests d&#8217;intégration vont exécuter un jeu d&#8217;environ 300 fichiers d&#8217;entrée, qui seront ensuite analysés par mon application.</p>
<p>Mon but est donc de connaître, en plus de ma couverture de test par les tests JUnit, la couverture du code exécuté par mes tests d&#8217;intégration.</p>
<p>La structure de mon projet ressemble en gros à ceci :</p>
<pre class="brush: plain;">
mon-projet
  +- pom.xml (ce pom-là n'est qu'un pom d'aggrégation)
  +- parent
  |   +- pom.xml (c'est le vrai parent de tous les autres modules)
  +- module-1
  |   +- pom.xml
  +- module-2
  |   +- pom.xml
  +- ...
  +- module-tests
      +- pom.xml
      +- src/test/java/
          +- foo/bar/IntegrationTestsRunner.java
</pre>
<p><i>module-tests</i> est un module ne contenant que quelques classes de tests, en particulier <code>IntegrationTestsRunner.java</code> dont le but est d&#8217;aller lire mes fichiers de tests, et les exécuter.</p>
<p>Afin de ne pas lancer ces tests d&#8217;intégration à chaque build, nous définissons un profil Maven dans le <code>pom.xml</code> de <i>module-tests</i>, comme suit :</p>
<pre class="brush: xml;">
    &lt;profiles&gt;
        &lt;profile&gt;
            &lt;id&gt;run-it&lt;/id&gt;
            &lt;activation&gt;
                &lt;property&gt;
                    &lt;name&gt;runIT&lt;/name&gt;
                    &lt;value&gt;true&lt;/value&gt;
                &lt;/property&gt;
            &lt;/activation&gt;
            &lt;build&gt;
                &lt;plugins&gt;
                    &lt;plugin&gt;
                        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
                        &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
                        &lt;configuration&gt;
                            &lt;includes&gt;
                                &lt;include&gt;**/IntegrationTestRunner.java&lt;/include&gt;
                            &lt;/includes&gt;
                        &lt;/configuration&gt;
                    &lt;/plugin&gt;
                &lt;/plugins&gt;
            &lt;/build&gt;
        &lt;/profile&gt;
    &lt;/profiles&gt;
</pre>
<p>Ce profil sera activé soit en ajoutant <code>-DrunIT=true</code> soit <code>-Prun-it</code> dans la ligne de commande Maven.</p>
<p>Avec une méthode &laquo;&nbsp;traditionnelle&nbsp;&raquo;, c&#8217;est-à-dire l&#8217;exécution de tests unitaires via Surefire, aucune couverture de code ne sera détectée, car le code exécuté par les tests d&#8217;intégration l&#8217;est sur les autres modules du projet. Or Cobertura ne va instrumentaliser que les classes du module courant et non les dépendances (i.e. <i>module-1</i>, <i>module-2</i>, etc.).</p>
<h2>Mise en place de JaCoCo</h2>
<p>Pour résoudre mon problème, je vais faire appel à <a href="http://www.eclemma.org/jacoco/" onclick="pageTracker._trackPageview('/outgoing/www.eclemma.org/jacoco/?referer=');">JaCoCo</a>, un outil de couverture de test plus performant que Cobertura. Son principal avantage est de pouvoir instrumentaliser les classes au runtime. Dans mon cas présent, JaCoCo va donc pouvoir vérifier la couverture du code sur les différents modules au moment où l&#8217;on exécute <i>module-tests</i>.</p>
<p>Avant toute chose, il va nous falloir configurer un peu notre environnement :</p>
<ul>
<li>Installer le plugin <a href="http://docs.codehaus.org/display/SONAR/JaCoCo+Plugin" onclick="pageTracker._trackPageview('/outgoing/docs.codehaus.org/display/SONAR/JaCoCo+Plugin?referer=');">JaCoCo pour Sonar</a> (à copier dans le répertoire <i>extensions/plugins</i> de son installation Sonar).</li>
<li>Une fois Sonar redémarré, penser à ajouter dans le dashboard le widget <i>IT Coverage Widget</i> (il faudra sans doute pour cela être connecté en tant qu&#8217;administrateur).</li>
<li>Télécharger l&#8217;<a href="http://www.eclemma.org/jacoco/trunk/doc/agent.html" onclick="pageTracker._trackPageview('/outgoing/www.eclemma.org/jacoco/trunk/doc/agent.html?referer=');">agent JaCoCo</a>. Pour cela, il faut récupérer le ZIP de JaCoCo <a href="http://www.eclemma.org/jacoco/" onclick="pageTracker._trackPageview('/outgoing/www.eclemma.org/jacoco/?referer=');">ici</a>, l&#8217;agent se trouvant alors dans <i>lib/jacocoagent.jar</i>.</li>
</ul>
<p>Maintenant que ceci est en place, nous allons devoir indiquer à Surefire d&#8217;utiliser un agent Java spécifique (l&#8217;agent JaCoCo).<br />
Etant donné que nous n&#8217;avons besoin de cet agent qu&#8217;au moment de l&#8217;exécution des tests d&#8217;intégration, nous le définirons que pour le profil <code>run-it</code>.<br />
Au sein du <code>pom.xml</code> parent, j&#8217;ai donc ajouté :</p>
<pre class="brush: xml;">
    &lt;profiles&gt;
        &lt;!-- Profile used to run Integration Tests. In such case, we add the Java agent for JaCoCo... --&gt;
        &lt;profile&gt;
            &lt;id&gt;run-it&lt;/id&gt;
            &lt;activation&gt;
                &lt;property&gt;
                    &lt;name&gt;runIT&lt;/name&gt;
                    &lt;value&gt;true&lt;/value&gt;
                &lt;/property&gt;
            &lt;/activation&gt;
            &lt;build&gt;
                &lt;plugins&gt;
                    &lt;plugin&gt;
                        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
                        &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
                        &lt;configuration&gt;
                            &lt;argLine&gt;-javaagent:${jacoco.agent.path}=destfile=${jacoco.file.path}&lt;/argLine&gt;
                        &lt;/configuration&gt;
                    &lt;/plugin&gt;
                &lt;/plugins&gt;
            &lt;/build&gt;
        &lt;/profile&gt;
    &lt;/profiles&gt;
</pre>
<p>J&#8217;ai défini mon profil deux fois, dans le <code>pom.xml</code> parent et dans celui de <i>module-tests</i>. Nous aurions pu tout mettre dans le parent.</p>
<h2>Execution</h2>
<p>Nous allons avoir besoin d&#8217;exécuter maintenant deux commandes Maven :</p>
<ul>
<li>mvn clean install -DrunIT=true -Djacoco.agent.path=C:\dev\jacocoagent.jar -Djacoco.file.path=C:\dev\monprojet\jacoco.exec</li>
<li>mvn -Dsonar.jacoco.itReportPath=C:\dev\monprojet\jacoco.exec sonar:sonar</li>
</ul>
<p>La première ligne va activer le profil <i>run-it</i>, ce qui aura pour conséquence de lancer le tests d&#8217;intégration.<br />
On y définit les deux paramètres (<code>jacoco.agent.path</code> et <code>jacoco.file.path</code>) qui seront passés à Surefire pour définir un agent Java.</p>
<p>La seconde ligne va simplement exécuter l&#8217;analyse Sonar sur mon projet, mais en définissant le paramètre <code>sonar.jacoco.itReportPath</code> (généré lors de la première commande), cette analyse comprendra également la couverture des tests d&#8217;intégration.</p>
<p>Une fois les deux commandes exécutées, il suffit de se rendre sur son serveur Sonar pour apprécier cette nouvelle mesure de couverture de code !</p>
<p>Comme le montre <a href="http://www.sonarsource.org/measure-code-coverage-by-integration-tests-with-sonar/" onclick="pageTracker._trackPageview('/outgoing/www.sonarsource.org/measure-code-coverage-by-integration-tests-with-sonar/?referer=');">les captures d&#8217;écran sur le post du blog de Sonar à ce sujet</a>, il est possible, à l&#8217;instar de la couverture de code, de visualiser la couverture de code de tests d&#8217;intégration directement dans la fenêtre de visualisation du code source d&#8217;une classe.</p>
<p><img src="http://linsolas.free.fr/wordpress/wp-content/uploads/it-code-coverage.jpg"/></p>
<a href="javascript:toggleStartStop();PicLensLite.start({feedUrl:'http://linsolas.free.fr/wordpress/wp-content/plugins/wp-piclens/mrss.php?id=159'});">Start Slide Show with PicLens Lite <img src="http://linsolas.free.fr/wordpress/wp-content/plugins/wp-piclens/PicLensButton.png" alt="PicLens" width="16" height="12" border="0" align="top"></a>]]></content:encoded>
			<wfw:commentRss>http://linsolas.free.fr/wordpress/index.php/2011/07/calculer-sa-couverture-de-code-par-les-tests-dintegration/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tutoriel Play !</title>
		<link>http://linsolas.free.fr/wordpress/index.php/2010/02/tutoriel-play/</link>
		<comments>http://linsolas.free.fr/wordpress/index.php/2010/02/tutoriel-play/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 19:13:06 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[play]]></category>

		<guid isPermaLink="false">http://linsolas.free.fr/wordpress/?p=111</guid>
		<description><![CDATA[Lors de mon précédent billet, j&#8217;avais évoqué le framework Play en montrant comment réaliser un simple Hello World. J&#8217;avais promis d&#8217;aller plus loin dans l&#8217;étude de ce framework, j&#8217;ai en fin de compte traduit l&#8217;intégralité du tutoriel présenté sur le site officiel. A travers ce tutoriel, vous pourrez découvrir plus de fonctionnalités de Play, d&#8217;apprendre [...]]]></description>
			<content:encoded><![CDATA[<p>Lors de mon <a href="http://linsolas.free.fr/wordpress/index.php/2010/01/jouons/">précédent billet</a>, j&#8217;avais évoqué le <a href="http://www.playframework.org" onclick="pageTracker._trackPageview('/outgoing/www.playframework.org?referer=');">framework Play</a> en montrant comment réaliser un simple Hello World.</p>
<p>J&#8217;avais promis d&#8217;aller plus loin dans l&#8217;étude de ce framework, j&#8217;ai en fin de compte traduit l&#8217;intégralité du tutoriel présenté sur le site officiel. A travers ce tutoriel, vous pourrez découvrir plus de fonctionnalités de Play, d&#8217;apprendre la façon dont il gère la persistence, comment créer des pages complexes, d&#8217;ajouter de l&#8217;authentification, etc.</p>
<p>Vous pouvez lire ma prose sur <a href="http://linsolas.developpez.com/articles/java/play/guide/" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/articles/java/play/guide/?referer=');">mon site developpez.com</a> !</p>
]]></content:encoded>
			<wfw:commentRss>http://linsolas.free.fr/wordpress/index.php/2010/02/tutoriel-play/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Et une année de plus chez developpez.com</title>
		<link>http://linsolas.free.fr/wordpress/index.php/2010/01/et-une-annee-de-plus-chez-developpez-com/</link>
		<comments>http://linsolas.free.fr/wordpress/index.php/2010/01/et-une-annee-de-plus-chez-developpez-com/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 21:53:19 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[article]]></category>

		<guid isPermaLink="false">http://linsolas.free.fr/wordpress/?p=83</guid>
		<description><![CDATA[Début avril 2008, il y a presque deux ans maintenant, mon premier article sur Hudson paraissait sur le site de developpez.com. Depuis, j&#8217;ai écrit 4 autres articles, 2 compte-rendus de conférences, ainsi qu&#8217;une critique de livre : L&#8217;intégration continue avec Hudson JetBrains TeamCity 4.0 Contrôler la qualité de son code source avec Sonar (écrit en [...]]]></description>
			<content:encoded><![CDATA[<p>Début avril 2008, il y a presque deux ans maintenant, <a href="http://linsolas.developpez.com/articles/hudson/" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/articles/hudson/?referer=');">mon premier article sur Hudson</a> paraissait sur le site de developpez.com. Depuis, j&#8217;ai écrit 4 autres articles, 2 compte-rendus de conférences, ainsi qu&#8217;une critique de livre :</p>
<ul>
<li><a href="http://linsolas.developpez.com/articles/hudson" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/articles/hudson?referer=');">L&#8217;intégration continue avec Hudson</a></li>
<li><a href="http://linsolas.developpez.com/articles/outil/integration-continue/teamcity" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/articles/outil/integration-continue/teamcity?referer=');">JetBrains TeamCity 4.0</a></li>
<li><a href="http://linsolas.developpez.com/articles/java/qualite/sonar" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/articles/java/qualite/sonar?referer=');">Contrôler la qualité de son code source avec Sonar</a> (écrit en 2008 mais mis à jour en 2009)</li>
<li><a href="http://linsolas.developpez.com/articles/conferences/citconf2009" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/articles/conferences/citconf2009?referer=');">Compte-rendu de la conférence CitConf 2009</a> (écrit en 2009)</li>
<li><a href="http://linsolas.developpez.com/articles/conferences/valtechdays2009/" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/articles/conferences/valtechdays2009/?referer=');">La conférence Valtech Days 2009</a> (écrit en 2009)</li>
<li><a href="http://linsolas.developpez.com/articles/java/outils/builds/" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/articles/java/outils/builds/?referer=');">Comparatif des outils de builds en Java</a> (écrit en 2009)</li>
<li><a href="http://linsolas.developpez.com/articles/java/maven3/" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/articles/java/maven3/?referer=');">Ce qui nous attend avec Maven 3</a> (écrit en 2009)</li>
<li><a href="http://linsolas.developpez.com/critiques/apache-maven/" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/critiques/apache-maven/?referer=');">Critique du livre &laquo;&nbsp;Apache Maven&nbsp;&raquo; de Nicolas de Loof et Arnaud Héritier</a> (écrit en 2009)</li>
</ul>
<p>Quelques chiffres maintenant, concernant l&#8217;année 2009 :</p>
<p style="text-align: center;"><a href="http://linsolas.free.fr/wordpress/wp-content/uploads/analytics-20091.jpg"><img class="aligncenter size-large wp-image-85" title="Fréquentation du site en 2009" src="http://linsolas.free.fr/wordpress/wp-content/uploads/analytics-20091-1024x116.jpg" alt="" width="512" height="58" /></a></p>
<p>On voit que la fréquentation quotidienne &#8211; hors week-end &#8211; est d&#8217;à peu près 120 &#8211; 150 visiteurs. On distingue cependant quatre pics lors du second semestre de l&#8217;année :</p>
<ul>
<li>Le 14 août, avec 750 visites, correspond à la mise à jour de l&#8217;article sur Sonar.</li>
<li>Le 6 octobre, avec 340 visites, pour le compte-rendu de la conférence CitConf 2009.</li>
<li>Le 25 novembre, avec 682 visites, atteint grâce à l&#8217;article sur les comparatif des outils de builds Java.</li>
<li>Le 17 décembre avec 743 visites, pour l&#8217;article traitant des nouveautés de Maven 3.</li>
</ul>
<p>Au total, durant cette année 2009, ce sont 35,940 visites qui ont été faites par 20,935 visiteurs sur mon site de <a href="http://linsolas.developpez.com" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com?referer=');">developpez.com</a> ! Cela fait un total de 62,322 pages vues.Pas mal non ?</p>
<p>Malgré cela, c&#8217;est mon &laquo;&nbsp;vieil&nbsp;&raquo; article sur Hudson (paru en avril 2008) qui truste la première place, avec 35,77% des pages vues.</p>
<p>Côté visiteurs, c&#8217;est évident la France qui héberge la plupart des visites (27,945 visites sur les 35,940), le Maroc arrivant deuxième (1,363 visites), suivie de près par la Belgique (1,105).  La Suisse, la Tunisie complète le quinté.</p>
<p>Au niveau des navigateurs, Firefox obtient la médaille d&#8217;or, avec presque 3 visiteurs sur 4 (71,56%), suivi d&#8217;Internet Explorer (16,32%), puis Chrome (5,93%). La très forte majorité des visiteurs tournent sur Windows (83,86%), Linux étant leur deuxième choix (11,80%). Il arrive également que quelques adeptes de la Pomme visitent mon site (3,89% pour MacOS, 0,24% pour l&#8217;iPhone !)&#8230;</p>
<p>Voilà une très belle année 2009 pour moi de ce côté-là. L&#8217;année 2010 sera-t-elle aussi productive ? Réponse dans 363 jours !</p>
<a href="javascript:toggleStartStop();PicLensLite.start({feedUrl:'http://linsolas.free.fr/wordpress/wp-content/plugins/wp-piclens/mrss.php?id=83'});">Start Slide Show with PicLens Lite <img src="http://linsolas.free.fr/wordpress/wp-content/plugins/wp-piclens/PicLensButton.png" alt="PicLens" width="16" height="12" border="0" align="top"></a>]]></content:encoded>
			<wfw:commentRss>http://linsolas.free.fr/wordpress/index.php/2010/01/et-une-annee-de-plus-chez-developpez-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven</title>
		<link>http://linsolas.free.fr/wordpress/index.php/2010/01/maven/</link>
		<comments>http://linsolas.free.fr/wordpress/index.php/2010/01/maven/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 20:48:26 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://linsolas.free.fr/wordpress/?p=80</guid>
		<description><![CDATA[Maven a une actualité assez chargée ces derniers temps, avec la sortie toute proche de la troisième génération de l&#8217;outil, mais également avec la publication d&#8217;un ouvrage sur Apache Maven, écrit par Nicolas de Loof et Arnaud Héritier. J&#8217;ai écrit courant décembre deux articles sur le site developpez.com concernant ces actualités : Les nouveautés d&#8217;Apache [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" title="Apache Maven par Nicolas de Loof et Arnaud Héritier" src="http://linsolas.developpez.com/critiques/apache-maven/images/couverture.jpg" alt="" width="500" height="500" /></p>
<p><a href="http://maven.apache.org/" onclick="pageTracker._trackPageview('/outgoing/maven.apache.org/?referer=');">Maven</a> a une actualité assez chargée ces derniers temps, avec la sortie toute proche de la troisième génération de l&#8217;outil, mais également avec <a href="http://www.pearson.fr/livre/?GCOI=27440100730370" onclick="pageTracker._trackPageview('/outgoing/www.pearson.fr/livre/?GCOI=27440100730370&amp;referer=');">la publication d&#8217;un ouvrage sur Apache Maven</a>, écrit par <a href="http://blog.loof.fr/" onclick="pageTracker._trackPageview('/outgoing/blog.loof.fr/?referer=');">Nicolas de Loof</a> et <a href="http://blog.aheritier.net/" onclick="pageTracker._trackPageview('/outgoing/blog.aheritier.net/?referer=');">Arnaud Héritier</a>.</p>
<p>J&#8217;ai écrit courant décembre deux articles sur le site <a href="http://www.developpez.com/" onclick="pageTracker._trackPageview('/outgoing/www.developpez.com/?referer=');">developpez.com</a> concernant ces actualités :</p>
<ul>
<li><a href="http://linsolas.developpez.com/articles/java/maven3/" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/articles/java/maven3/?referer=');">Les nouveautés d&#8217;Apache Maven 3</a></li>
<li>Critique du livre &laquo;&nbsp;Apache Maven&nbsp;&raquo; (<a href="http://java.developpez.com/livres/?page=Outils#L9782744023378" onclick="pageTracker._trackPageview('/outgoing/java.developpez.com/livres/?page=Outils_L9782744023378&amp;referer=');">résumé</a>, <a href="http://linsolas.developpez.com/critiques/apache-maven/" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/critiques/apache-maven/?referer=');">version longue</a>).</li>
</ul>
<p>Bonne lecture, et n&#8217;hésitez pas à réagir à ces articles sur le site de developpez.com ou en commentaires ici !</p>
<a href="javascript:toggleStartStop();PicLensLite.start({feedUrl:'http://linsolas.free.fr/wordpress/wp-content/plugins/wp-piclens/mrss.php?id=80'});">Start Slide Show with PicLens Lite <img src="http://linsolas.free.fr/wordpress/wp-content/plugins/wp-piclens/PicLensButton.png" alt="PicLens" width="16" height="12" border="0" align="top"></a>]]></content:encoded>
			<wfw:commentRss>http://linsolas.free.fr/wordpress/index.php/2010/01/maven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
