<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Le blog d'Arnaud</title>
	
	<link>http://blog.aheritier.net</link>
	<description />
	<lastBuildDate>Fri, 19 Feb 2010 10:46:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/aheritier-posts" /><feedburner:info uri="aheritier-posts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>48.5652</geo:lat><geo:long>2.5452</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:emailServiceId>aheritier-posts</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Convertir en masse les notifications standard Hudson par celles du plugin Email-Ext</title>
		<link>http://feedproxy.google.com/~r/aheritier-posts/~3/3b1QF4VD7p0/</link>
		<comments>http://blog.aheritier.net/convertir-en-masse-les-notifications-standard-hudson-par-celles-du-plugin-email-ext/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 07:00:23 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Retour d'expérience]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Hudson]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=891</guid>
		<description><![CDATA[Chez eXo platform nous utilisons Hudson pour notre intégration continue.
La combinatoire entre les différents types de builds (intégration continue, reporting, packaging), les différents projets et leurs différentes branches de maintenance représente des dizaines de jobs dans Hudson.
Jusqu&#8217;à présent nous utilisions les notifications standards de Hudson pour recevoir les emails avec les statuts courant des jobs.
Il [...]<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=8.0" /></div><div>Rating: 8.0/<strong>10</strong> (1 vote cast)</div><br />]]></description>
			<content:encoded><![CDATA[<p><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>Chez <a href="http://www.exoplatform.com">eXo platform</a> nous utilisons <a href="https://hudson.dev.java.net/">Hudson</a> pour notre <a href="http://builder.exoplatform.org">intégration continue</a>.<br />
La combinatoire entre les différents types de builds (intégration continue, reporting, packaging), les différents projets et leurs différentes branches de maintenance représente des dizaines de jobs dans Hudson.<br />
Jusqu&#8217;à présent nous utilisions les notifications standards de Hudson pour recevoir les emails avec les statuts courant des jobs.<br />
Il faut cependant avouer que celles-ci offrent très peu souplesse en ce qui concerne le contenu et les conditions de notification.<br />
<span id="more-891"></span><br />
J&#8217;ai donc installé le plugin <a href="http://wiki.hudson-ci.org/display/HUDSON/Email-ext+plugin">Hudson Email Extension Plugin</a> qui est beaucoup plus paramétrable.<br />
Après quelques tests concluant sur un nombre limité de projets, j&#8217;en viens donc au déploiement global sur l&#8217;ensemble des jobs hudson.<br />
Et là c&#8217;est la catastrophe !!!! Hudson ne propose pas d&#8217;édition en masse de ses jobs (à part le plugin <a href="http://wiki.hudson-ci.org/display/HUDSON/Configuration+Slicing+Plugin">Configuration Slicing plugin</a> mais qui ne gère qu&#8217;un nombre très restreint d&#8217;éléments de configuration).<br />
Alors comment faire ?<br />
Après un rapide tour sur la liste de diffusion du projet  on me conseil &laquo;&nbsp;tout simplement&nbsp;&raquo; d&#8217;utiliser la capacité de modification à chaud du serveur à l&#8217;aide de sa console Groovy.<br />
Celle-ci est effectivement bien plus puissante qu&#8217;un simple &laquo;&nbsp;Bulk change&nbsp;&raquo; puisque l&#8217;on peut accéder à l&#8217;ensemble des objets en mémoire sur le serveur (et donc à la configuration des jobs).<br />
Le gros avantage de cette solution &laquo;&nbsp;codée&nbsp;&raquo; c&#8217;est aussi qu&#8217;elle me permet de reprendre les listes de destinataires utilisées par le mécanisme de notification standard afin de les injecter dans la nouvelle configuration.</p>
<p>Ce script execute donc pour chaque job les étapes suivantes :</p>
<ul>
<li>Si le job est de type Maven alors j&#8217;enregistre la liste de destinataires depuis le &laquo;&nbsp;reporter&nbsp;&raquo; et je le retire du job.</li>
<li>Dans tous les cas je regarde les &laquo;&nbsp;publishers&nbsp;&raquo; actuels et si il y a les notifications standards ou du plugin mail-ext j&#8217;enregistre la liste de destinataires (donc la liste de mail-ext écrase celle de la notification standard si elle existait qui elle même écrase celle de maven si elle existait) et je retire le ou les &laquo;&nbsp;publishers&nbsp;&raquo;.</li>
<li>Je crée et rajoute au job mon nouveau &laquo;&nbsp;publisher&nbsp;&raquo; mail-ext configuré selon mes besoins.</li>
</ul>
<p>J&#8217;ai ainsi pu mettre à jour tous les jobs de mon serveur sans erreur et sans tâche manuelle fastidieuse.</p>
<p>Ci dessous le script groovy (n&#8217;étant ni expert en groovy et encore moins dans les APIs d&#8217;Hudson que je découvre, ce code doit être facilement améliorable).</p>
<pre class="brush: groovy">
import hudson.plugins.emailext.*
import hudson.plugins.emailext.plugins.trigger.*
import hudson.plugins.jira.*
import hudson.model.*
import hudson.maven.*
import hudson.maven.reporters.*
import hudson.tasks.*

// For each project
for(item in Hudson.instance.items) {
  def recipients
  println(&quot;JOB : &quot;+item.name);

  // Find current recipients defined in project

  if(item instanceof MavenModuleSet) {
    println(&quot;&gt;MAVEN MODULE SET&quot;);

    // Search for Maven Mailer Reporter
    println(&quot;&gt;&gt;Reporters&quot;);
    for(reporter in item.reporters) {
      println(&quot;&gt;&gt;&gt; &quot;+reporter);
      if(reporter instanceof MavenMailer) {
        recipients = reporter.recipients
        // remove it
        item.reporters.remove(reporter)
      }
    }
  } else
  if(item instanceof FreeStyleProject) {
    println(&quot;&gt;FREESTYLE PROJECT&quot;);
  }

  println(&quot;&gt;&gt;Publishers&quot;);
  for(publisher in item.publishersList) {
    println(&quot;&gt;&gt;&gt; &quot;+publisher);
    // Search for default Mailer Publisher
    if(publisher instanceof Mailer) {
      recipients = publisher.recipients
      // remove it
      item.publishersList.remove(publisher)
    } else
    // Or for Extended Email Publisher
    if(publisher instanceof ExtendedEmailPublisher) {
      recipients = publisher.recipientList
      item.publishers.remove(publisher)
      // remove it
      item.publishersList.remove(publisher)
    }
  }

  // If we found recipients list to send mail
  if(recipients!=null){
    println (&quot;&gt;CURRENT RECIPIENT : &quot;+recipients)
    // We create a new Extended Email Publisher
    def eep = new ExtendedEmailPublisher();
    eep.recipientList = recipients
    eep.defaultSubject = &quot;\$DEFAULT_SUBJECT&quot;
    eep.defaultContent = &quot;\$DEFAULT_CONTENT&quot;
    // With some triggers
    eep.configuredTriggers.add(new FailureTrigger(
      email : new EmailType(sendToRecipientList : true,
        body : ExtendedEmailPublisher.PROJECT_DEFAULT_BODY_TEXT,
        subject : ExtendedEmailPublisher.PROJECT_DEFAULT_SUBJECT_TEXT )))
    eep.configuredTriggers.add(new FixedTrigger(
      email : new EmailType(sendToRecipientList : true,
        body : ExtendedEmailPublisher.PROJECT_DEFAULT_BODY_TEXT,
        subject : ExtendedEmailPublisher.PROJECT_DEFAULT_SUBJECT_TEXT )))
    eep.configuredTriggers.add(new StillFailingTrigger(
      email : new EmailType(sendToRecipientList : true,
        body : ExtendedEmailPublisher.PROJECT_DEFAULT_BODY_TEXT,
        subject : ExtendedEmailPublisher.PROJECT_DEFAULT_SUBJECT_TEXT )))
    eep.configuredTriggers.add(new StillUnstableTrigger(
      email : new EmailType(sendToRecipientList : true,
        body : ExtendedEmailPublisher.PROJECT_DEFAULT_BODY_TEXT,
        subject : ExtendedEmailPublisher.PROJECT_DEFAULT_SUBJECT_TEXT )))
    eep.configuredTriggers.add(new UnstableTrigger(
      email : new EmailType(sendToRecipientList : true,
         body : ExtendedEmailPublisher.PROJECT_DEFAULT_BODY_TEXT,
        subject : ExtendedEmailPublisher.PROJECT_DEFAULT_SUBJECT_TEXT )))
    // And we add/replace it in the project
    item.publishersList.replace(eep);
  }else{
    println (&quot;&gt;NO RECIPIENT&quot;)
  }

  println(&quot;\n=======\n&quot;);
}
</pre>
<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=8.0" /></div><div>Rating: 8.0/<strong>10</strong> (1 vote cast)</div><br />
<p><a href="http://feedads.g.doubleclick.net/~a/5_fXPeVoUJ0p_gPVZvjwFMFgtUo/0/da"><img src="http://feedads.g.doubleclick.net/~a/5_fXPeVoUJ0p_gPVZvjwFMFgtUo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/5_fXPeVoUJ0p_gPVZvjwFMFgtUo/1/da"><img src="http://feedads.g.doubleclick.net/~a/5_fXPeVoUJ0p_gPVZvjwFMFgtUo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/aheritier-posts/~4/3b1QF4VD7p0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/convertir-en-masse-les-notifications-standard-hudson-par-celles-du-plugin-email-ext/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://blog.aheritier.net/convertir-en-masse-les-notifications-standard-hudson-par-celles-du-plugin-email-ext/</feedburner:origLink></item>
		<item>
		<title>Maven Release Plugin 2.0</title>
		<link>http://feedproxy.google.com/~r/aheritier-posts/~3/LTsTChj_DA4/</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[Actualité]]></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 &#171;&#160;flat&#160;&#187; ou aussi nommée &#171;&#160;en râteau&#160;&#187;. Pour ces projets ( pour diverses bonnes ou moins bonnes raisons ) le POM parent [...]<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 &laquo;&nbsp;flat&nbsp;&raquo; ou aussi nommée &laquo;&nbsp;en râteau&nbsp;&raquo;</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 />
<p><a href="http://feedads.g.doubleclick.net/~a/sfJdo-tOOpCGtP_0SupZcLfFPYk/0/da"><img src="http://feedads.g.doubleclick.net/~a/sfJdo-tOOpCGtP_0SupZcLfFPYk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/sfJdo-tOOpCGtP_0SupZcLfFPYk/1/da"><img src="http://feedads.g.doubleclick.net/~a/sfJdo-tOOpCGtP_0SupZcLfFPYk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/aheritier-posts/~4/LTsTChj_DA4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/maven-release-plugin-2-0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.aheritier.net/maven-release-plugin-2-0/</feedburner:origLink></item>
		<item>
		<title>From Apache Archiva to Sonatype Nexus</title>
		<link>http://feedproxy.google.com/~r/aheritier-posts/~3/EDcz_Dph1tM/</link>
		<comments>http://blog.aheritier.net/from-apache-archiva-to-sonatype-nexus/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 07:00:51 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Retour d'expérience]]></category>
		<category><![CDATA[Apache Archiva]]></category>
		<category><![CDATA[Apache Maven]]></category>
		<category><![CDATA[Sonatype Nexus]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=597</guid>
		<description><![CDATA[This article was firstly published in this blog in french in May 2009 and later in english in Sonatype Blog. I put a copy here as an archive.
&#60;disclaimer&#62; As a member of the Archiva team (though rarely active, I admit) I will try to defend it throughout this article. However, being a professional consultant first [...]<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><em>This article was firstly published <a href="http://blog.aheritier.net/dapache-archiva-a-sonatype-nexus-introduction/" title="D’Apache Archiva à Sonatype Nexus – Introduction" >in this blog</a> in french in May 2009 and later in english in <a href="http://www.sonatype.com/people/2009/07/from-apache-archiva-to-sonatype-nexus/">Sonatype Blog</a>. I put a copy here as an archive.</em></p>
<p><em>&lt;disclaimer&gt; As a member of the <a href="http://archiva.apache.org/">Archiva</a> team (though rarely active, I admit) I will try to defend it throughout this article. However, being a professional consultant first and foremost, I hope to keep my objectivity. I&#8217;ll let you be the judge &#8230;  &lt;/disclaimer&gt;<br />
</em></p>
<p>Having recently migrated a significant number of repository servers from <a href="http://archiva.apache.org/">Apache Archiva</a> to <a href="http://nexus.sonatype.org/">Sonatype Nexus</a>, I would like to share with you the process I followed, some tips, and point out a few pitfalls I encountered.<a href="http://blog.aheritier.net/wp-content/uploads/2009/05/nexus-real-logo.png"><img class="alignright size-medium wp-image-458" title="nexus-real-logo" src="http://blog.aheritier.net/wp-content/uploads/2009/05/nexus-real-logo-300x99.png" alt="nexus-real-logo" width="300" height="99" /></a><br />
A big Thank you to <a href="http://www.tarpoon.org/">Tarpoon</a>, <a href="http://www.cestpasdur.com/">C&#8217;est pas dur</a> and all of my team for helping.</p>
<p><span id="more-597"></span></p>
<h1>Introduction</h1>
<h2>Background</h2>
<p>A little background to this migration: We had a large enterprise-scale implementation with dozens of JEE projects of all sizes (from a mouse to the ocean liner &#8211; and NO! I am not talking about the Titanic!), and at least 200 active developers accessing the system simultaneously during the day.<br />
Most projects are using Maven. To help teams to <strong>make </strong> better and faster builds we offered a complete infrastructure for continuous integration: a big server (Dual QuadCore Xeon with 16GB RAM running Red Hat Enterprise Linux 5.1),  hosting an <a href="http://www.atlassian.com/software/bamboo/">Atlassian Bamboo</a> continuous integration server with (approximately): 110 (real time) continuous integration builds, 40 (daily) maven sites builds, 20 (daily) <a href="http://sonar.codehaus.org/">Sonar</a> builds. It also hosted a Maven repository server  (Archiva 1.1.1 before migrating), which stored a little less than a dozen local repositories and provided a proxy and cache for twenty external repositories (for almost 400GB of data).<br />
The majority of that space was used by the repository of internal snapshots (200GB) and the repository of internal releases (150GB). To understand these sizes you must know that some projects may produce (for good or bad reasons) some EARs up to 100MB in size. By adding the sizes of JARs and WARs that compose these EARs, each deployment quickly grows to take up a lot of space.</p>
<h2>Why change?</h2>
<p>For several months we were having stability issues with our integration environment. From one build to another we would see execution times fluctuate widely. We also had intermittent errors that were not related to projects, but to the infrastructure :</p>
<ul>
<li>500 or 502 errors on uploads in Archiva without any apparent reason (I tried to track down the issues without success),</li>
<li>Many periods of unavailability of Archiva or Bamboo after exceeding the maximum number of open file descriptors allowed for the user. We must concede that these tools handle a lot of files (downloads, uploads, and other manipulations on a large number of artifacts). Archiva easily exceeds the default limit of 1024 descriptors which forced us to increase it. But even at 2048 Archiva would still occasionally exceed the limit.</li>
<li>Inability to download snapshots if the local repository used by Bamboo was emptied just prior to that. This resulted in regular failures of our Maven sites or Sonar builds.</li>
</ul>
<p>We recently submitted a bug against Archiva (<a href="http://jira.codehaus.org/browse/MRM-1136">MRM-1136</a>), for which I spent several hours diagnosing the issue (problems with management of meta-data issued by Maven 2.1.0). To resolve the issue would require us to quickly upgrade to Archiva 1.1.4 or 1.2.</p>
<p>All of these problems, even though they were only occasional, strongly discredited our continuous integration service. How could we criticize a project for not using our CI if it kept sending them false negatives? They already have enough work with addressing real errors in their builds. The continuous integration environment must be as reliable as a Swiss watch.</p>
<p>It was time for us to act.</p>
<p>We could update Archiva, which would entail significant validation costs without much improvement. Apart from the incompatibility with Maven 2.1.0, nothing suggested that the new version fixed any of our problems and there were few improvements/new features at that time, due to lack of time by the maintainers.</p>
<p>The other choice was to get another tool with the potential to meet the new requirements.</p>
<p>The feedback from the community about Nexus was very encouraging. Moreover, the latter pro version opens up new possibilities for the future with its innovative features:</p>
<ul>
<li>Staging repositories to put artifacts being validated in a temporary area prior to delivery.</li>
<li>Opportunity to proxy and aggregate eclipse update sites. Currently we are doing it by hand, which is expensive, complicated (I hate P2), and boring.</li>
<li>and more&#8230;</li>
</ul>
<p>As the situation seemed to be calling for it, we decided to try our luck with Nexus.</p>
<h1>Migration</h1>
<p>Let&#8217;s get started.</p>
<h2>Existing environment</h2>
<p>A little overview of our existing environment. Before the migration, our environment was like this:</p>
<div id="attachment_609" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.aheritier.net/wp-content/uploads/2009/07/ArchivaNexusBeforeMigration.png"><img class="size-medium wp-image-609" title="The environment before the migration" src="http://blog.aheritier.net/wp-content/uploads/2009/07/ArchivaNexusBeforeMigration-300x227.png" alt="The environment before the migration" width="300" height="227" /></a><p class="wp-caption-text">The environment before the migration</p></div>
<p>We were hosting our internal repositories in what Archiva calls managed repositories. There is one for releases, one for snapshots and another one for third-party libraries (often those delivered by closed-source vendors).<br />
To cache external repositories (configured as &laquo;&nbsp;remote repositories&nbsp;&raquo;) we are using two more repositories (one for external releases and one for external snapshots).</p>
<p>Our Archiva shows two groups: One to access released artifacts, and another one for snapshots. We never set up a unique group with access to both of them because in our tests we noticed that Archiva often had issues merging descriptors coming from several repositories (maven-metadata.xml), and it can have dramatic consequences if you mix up releases and snapshots.</p>
<p>Groups allow to greatly simplify Maven configuration, avoiding the need to declare too many repositories. Moreover, they enhance your Maven experience, speeding up your builds. Each missing dependency request is sent only once to each group, while the process in the background polls each repository in the group and maintains a cache about missing dependencies to further speed up the build. Sending missing dependency requests to several repositories is an inexcusable waste of time.</p>
<p>Repository users (developers and the continuous integration server) access them using these settings :</p>
<pre class="brush: xml">
&lt;settings&gt;
  &lt;profiles&gt;
    &lt;profile&gt;
      &lt;id&gt;default&lt;/id&gt;
      &lt;repositories&gt;
        &lt;repository&gt;
          &lt;id&gt;central&lt;/id&gt;
          &lt;url&gt;http://serveur.entreprise.fr/archiva/repository/releases/ &lt;/url&gt;
          &lt;releases&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/releases&gt;
          &lt;snapshots&gt;&lt;enabled&gt;false&lt;/enabled&gt;&lt;/snapshots&gt;
        &lt;/repository&gt;
        &lt;repository&gt;
          &lt;id&gt;snapshots&lt;/id&gt;
          &lt;url&gt;http://serveur.entreprise.fr/archiva/repository/snapshots/ &lt;/url&gt;
          &lt;releases&gt;&lt;enabled&gt;false&lt;/enabled&gt;&lt;/releases&gt;
          &lt;snapshots&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/snapshots&gt;
        &lt;/repository&gt;
      &lt;/repositories&gt;
     &lt;pluginrepositories&gt;
        &lt;pluginrepository&gt;
          &lt;id&gt;central&lt;/id&gt;
          &lt;url&gt;http://serveur.entreprise.fr/archiva/repository/releases/ &lt;/url&gt;
          &lt;releases&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/releases&gt;
          &lt;snapshots&gt;&lt;enabled&gt;false&lt;/enabled&gt;&lt;/snapshots&gt;
        &lt;/pluginrepository&gt;
        &lt;pluginrepository&gt;
          &lt;id&gt;snapshots&lt;/id&gt;
          &lt;url&gt;http://serveur.entreprise.fr/archiva/repository/snapshots/ &lt;/url&gt;
          &lt;releases&gt;&lt;enabled&gt;false&lt;/enabled&gt;&lt;/releases&gt;
          &lt;snapshots&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/snapshots&gt;
        &lt;/pluginrepository&gt;
      &lt;/pluginrepositories&gt;
    &lt;/profile&gt;
  &lt;/profiles&gt;
  &lt;activeprofiles&gt;
    &lt;activeprofile&gt;default&lt;/activeprofile&gt;
  &lt;/activeprofiles&gt;
&lt;/settings&gt;
</pre>
<p>By redefining the central server address (normally located here: <a href="http://repo1.maven.org/maven2/">http://repo1.maven.org/maven2/</a>) we configured Maven to look only for released artifacts in our group in Archiva. This gives us access to both internal and external releases. In the same way, the repository snapshots allow us to obtain development versions of all artifacts.</p>
<h2>Constraints</h2>
<p>Migrating a server isn&#8217;t easy when you have 200 developers using it every day.</p>
<p>First, we had to be sure to only stop the service for a very short time (or we would have to do it outside of working hours&#8230; ouch!!!). Stopping the continuous integration server temporarily isn&#8217;t such a big problem. Asking all teams to use maven in offline mode, and not to use our repositories is more difficult. Usually, we don&#8217;t have to wait long before someone needs to download a new artifact or a project has to do a release.</p>
<p>Secondly, it was mandatory for us to keep the compatibility with preexisting Maven settings. Due to the large number of projects and developers it would be impossible to change all repositories settings in Maven configuration. It would impact all projects and all developers if we changed the upload URLs (distributionManagement) and download settings (repositories).</p>
<h2>The process</h2>
<p>To reduce cost, we decided to not perform our tests in a test environment. This would require us to duplicate the entire integration environment we have in production.<br />
After some basic tests performed on the tool, the real baptism by fire was the scalability of the server (with an increasing volume of data and number of users).<br />
During migration system resources allowed us to easily handle both servers in parallel. We chose the strategy to run Archiva and Nexus in parallel and to switch services to the new server one after another, while keeping the fallback option to revert if necessary.</p>
<p>We had enough space to rebuild caches of external repositories (this required only a few gigabytes), however we could not duplicate our internal repositories, which are too large, and we could have consistency issues. We also did not want to give both products access to internal repositories, because we feared they might access them simultaneously and corrupt our data. Therefore we began our migration leaving our internal repositories on Archiva planning to move them to Nexus at the end of migration.</p>
<p>For URL compatibility we used rewriting rules on the Apache server. It would switch between old and new URLs in a transparent manner.</p>
<h2>Installing Nexus</h2>
<p>We performed a classic installation of Nexus 1.3.2 (the opensource and standalone bundle) adjusting a few parameters such as the HTTP port, the paths of data and log directories to conform to the organization of our server. All this was quickly done because unlike Archiva we did not have to create a database (which had to be in mysql to follow our standards). Our server was up and ready to be configured.</p>
<h2>Configuration of groups and external repositories</h2>
<p>We started the Nexus configuration by creating proxy repositories. We also added, for purposes of migration, proxies for our internal repositories hosted on Archiva.</p>
<p>The GUI is ergonomic which makes the registration of 20 external repositories very bearable. Thank you <a href="http://extjs.com/">ExtJS</a>!</p>
<p>Unlike Archiva which proposes to store the artifacts of external repositories in the same local repository, Nexus stores the contents of each in a dedicated repository (proxy).</p>
<p>Regarding settings of external repositories, it should be noted that we lose the opportunity provided by Archiva to have white and black lists of artifacts coming from each external repository. Nexus uses the concept of &laquo;&nbsp;routes&nbsp;&raquo; for this type of filtering. Unfortunately we can apply those routes only at a group level and not on a repository.<br />
Since some lists that we have in Archiva are only for performance issues (e.g. do not query a repository in which we know that a certain artifact is not located), we decided to not duplicate this setup in Nexus waiting to see if there were real problems.</p>
<p>In our setting we faced a first disappointment. As we have to proxy some repositories hosted internally (the one delivered by the Sonar server and all of those always on Archiva during the migration) we were forced to declare the company web proxy on each proxy repository. It is impossible to define the web proxy in the global configuration of Nexus and to disable it on a given proxy repository (<a href="https://issues.sonatype.org/browse/NEXUS-2317">NEXUS-2317</a>).</p>
<p>While our external repositories configuration was almost complete, we had our first big setback. We discovered that it was impossible to proxy repositories which are in the legacy layout of maven 1 (at Atlassian and dev.java.net for example).<br />
To achieve this we need to create virtual repositories which are used by Nexus to convert a repository from one format to another. Tough luck, because two bugs (<a href="https://issues.sonatype.org/browse/NEXUS-1909">NEXUS-1909</a>, <a href="https://issues.sonatype.org/browse/NEXUS-1910">NEXUS-1910</a>) prevented us from doing it.<br />
Fortunately for us, the Nexus team has been very responsive and was able to incorporate the corrections to these bugs in version 1.3.3 which was published the day after our discovery. Otherwise we have to admit that we probably would not have continued our tests on Nexus.<br />
We have updated our server which allowed us to see that the process was very simple since the application, its configuration, and the data were all well separated.</p>
<p>We finalized the configuration of Nexus by creating groups. That is the same concept as in Archiva (which copied it).<br />
The configuration of groups is however relatively poorly designed in terms of ergonomics. We had to select each repository we wanted to add to the group and then put it in the correct order in the list. The order is very important, because Nexus will use it to search for artifacts. We must therefore place  internal repositories prior to external ones. The problem is that this list displays only the name of each repository (and the name is often truncated because of its length). So you should be careful in naming your repositories to be able to easily sort them when you have several dozen in a group.</p>
<p>We followed Nexus recommendations by creating a single group that exposes all releases and all snapshots. (This will help us avoid having to battle the screen for configuring a group twice <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).</p>
<p>From now we were supposed to be able to download all artifacts needed to build our projects with Nexus.</p>
<p>After several successful tests on our desktop we tested the whole system with our continuous integration server.<br />
We deleted its local repository and updated its configuration:</p>
<pre class="brush: xml">
&lt;settings&gt;
  &lt;mirrors&gt;
    &lt;mirror&gt;
      &lt;!--This sends everything else to /public --&gt;
      &lt;id&gt;nexus&lt;/id&gt;
      &lt;mirrorof&gt;*&lt;/mirrorof&gt;
      &lt;url&gt;http://serveur.entreprise.fr/nexus/content/groups/public/ &lt;/url&gt;
    &lt;/mirror&gt;
  &lt;/mirrors&gt;
  &lt;profiles&gt;
    &lt;profile&gt;
      &lt;id&gt;default&lt;/id&gt;
      &lt;!--Enable snapshots for the built in central repo to direct --&gt;
      &lt;!--all requests to nexus via the mirror --&gt;
      &lt;repositories&gt;
        &lt;repository&gt;
          &lt;id&gt;central&lt;/id&gt;
          &lt;url&gt;http://central &lt;/url&gt;
          &lt;releases&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/releases&gt;
          &lt;snapshots&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/snapshots&gt;
        &lt;/repository&gt;
      &lt;/repositories&gt;
     &lt;pluginrepositories&gt;
        &lt;pluginrepository&gt;
          &lt;id&gt;central&lt;/id&gt;
          &lt;url&gt;http://central &lt;/url&gt;
          &lt;releases&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/releases&gt;
          &lt;snapshots&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/snapshots&gt;
        &lt;/pluginrepository&gt;
      &lt;/pluginrepositories&gt;
    &lt;/profile&gt;
  &lt;/profiles&gt;
  &lt;activeprofiles&gt;
    &lt;!--make the profile active all the time --&gt;
    &lt;activeprofile&gt;default&lt;/activeprofile&gt;
  &lt;/activeprofiles&gt;
&lt;/settings&gt;
</pre>
<p><strong>Please note:</strong>  I am not at all a fan of using the mirror * which requires us to put releases and snapshots in the same group. However, this is the only solution, as there is no way to tell Maven to find releases on one mirror location and snapshots on another one. I find this dangerous because e.g. when you call a plugin without defining its version (a plugin in command line such as eclipse:eclipse or archetype:generate) you may retrieve a snapshot version of it. Thus you have to take care to follow the recommendation of Maven to define all the versions of plugins that are used in your project descriptor (directly or by inheritance) to avoid surprises. In our context we won&#8217;t have this issue since the recommendation is followed by all projects using a parent POM that is setting all versions for them.</p>
<p>The environment with Nexus and Archiva running in parallel was now ready to go :</p>
<div id="attachment_610" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.aheritier.net/wp-content/uploads/2009/07/ArchivaNexusWhileMigrating.png"><img class="size-medium wp-image-610" title="The environment while migrating" src="http://blog.aheritier.net/wp-content/uploads/2009/07/ArchivaNexusWhileMigrating-300x153.png" alt="The environment while migrating" width="300" height="153" /></a><p class="wp-caption-text">The environment while migrating</p></div>
<p>Nothing changed for developers who still use Archiva while the continuous integration server retrieves all artifacts from Nexus.</p>
<h2>Tuning</h2>
<p>After testing it a few days we could see that Nexus sometimes had difficulty quickly delivering artifacts. The time has come to look at a few more advanced settings.</p>
<p>Routes allow to restrict the list of repositories that Nexus has to verify when we request an artifact to a group. This can be done via permissions or prohibitions.</p>
<p>The first route we create is the one which tells to Nexus to search for our artifacts (.*/com.mycompany/.*) only in proxy repositories giving access to our internal artifacts on Archiva. <em>When the switch to Nexus will be completely finalized, this route will point only to our internal repositories hosted by Nexus.</em></p>
<p>We also add rules for .*/org/apache/.* and .*/org/codehaus/.* which are heavily used by Maven, so that artifacts are retrieved only from the central repository and snapshots repositories of each community.</p>
<p>This gave a pretty good boost to our Nexus implementation.</p>
<p>After several days of use by the continuous integration server, Nexus was running fine. Therefore we got ready for the second part of our migration: hosting of our internal repositories on Nexus.</p>
<h2>Setting internal repositories and security</h2>
<p>Before we could move internal repositories from Archiva to Nexus we had to create hosted repositories. We created directories for our repositories in a different location from Archiva, as to not let both products access the same data. We reused repository identifiers used in Archiva to easily create rewriting rules on Apache HTTP server.</p>
<p>We spent some time learning the security mechanism in Nexus. Settings are so fine that even the most basic use cases require convoluted settings.</p>
<p>We began by creating privileges (read, write, update) on each hosted repository. We created roles that grouped some privileges on hosted repositories together. In our case, one role to deploy released artifacts on repositories (for projects teams) and another role to deploy snapshots on repositories (for continuous integration server).</p>
<p>We finished by creating users with roles defined above without forgetting the role to download from any repository.</p>
<p>Internal repositories were ready, all was left to do was to move data to Nexus and to stop Archiva.</p>
<h2>The final steps</h2>
<p>To keep the compatibility between Archiva and Nexus we had to do two things.<br />
For each internal repository on which we&#8217;ll have to upload artifacts we explicitly wrote a rule to transform the URL from Archiva to Nexus.<br />
Apache configuration example:</p>
<pre class="brush: text">
RewriteRule ^/archiva/repository/internal-releases/(.*) http://localhost/nexus/content/repositories/internal-releases/$1 [P]
RewriteRule ^/archiva/repository/internal-snapshots/(.*) http://localhost/nexus/content/repositories/internal-snapshots/$1 [P]
RewriteRule ^/archiva/repository/third-parties/(.*) http://localhost/nexus/content/repositories/third-parties/$1 [P]
</pre>
<p>For all other types of read access we just created a rule which transfered them to our unique group in Nexus.<br />
Apache configuration example:</p>
<pre class="brush: text">
RewriteRule ^/archiva/repository/[a-z\-]+/(.*) http://localhost/nexus/content/groups/public/$1 [P]
</pre>
<p>Now we were ready to migrate:</p>
<ol>
<li>Stop Nexus.</li>
<li>Stop Archiva.</li>
<li>Install rewriting rules on Apache.</li>
<li>Move content of internal repositories from Archiva to Nexus.</li>
<li>Restart Nexus.</li>
</ol>
<p>On D-day we made the switch in less than 10 minutes. Nexus took a few hours to index the hundreds of GB of data, but without taking much of a performance hit.</p>
<div id="attachment_611" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.aheritier.net/wp-content/uploads/2009/07/ArchivaNexusAfterMigration.png"><img class="size-medium wp-image-611" title="The final environment" src="http://blog.aheritier.net/wp-content/uploads/2009/07/ArchivaNexusAfterMigration-300x182.png" alt="The final environment" width="300" height="182" /></a><p class="wp-caption-text">The final environment</p></div>
<p>Despite some pitfalls we encountered, the migration wasn&#8217;t technically really complex. We did it in 2 weeks and we spent less than half that time actually working on it.</p>
<p>Now we are studying how to configure scheduled services. <a href="http://www.sonatype.com">Sonatype</a> made a major effort on <a href="http://www.sonatype.com/books/nexus-book/reference/">product documentation</a>. It allows us to quickly discover all its features. However, we are disappointed when we want to go further than the reference guide. Some best practices about the usage of the tool in a corporate environment are still missing:</p>
<ul>
<li>What scheduled tasks should be used?</li>
<li>Under what circumstances?</li>
<li>When?</li>
<li>Why should we repair metadata?</li>
<li>Why should we delete caches?</li>
<li>How are we supposed to use the trash?</li>
</ul>
<h1>Results</h1>
<p>Two weeks after the migration we drew a first conclusion of our Nexus experience. </p>
<p>Let&#8217;s begin by changes on issues we previously had with Archiva and which led us to attempt the Nexus adventure.</p>
<h2>The number of file descriptors simultaneously opened</h2>
<p>It&#8217;s a little bit early to declare victory, however after running for two weeks we can see that our problem on the number of file descriptors opened simultaneously disappeared. <strong>Whereas Archiva easily exceeded the 1024 descriptors opened, Nexus uses only 400 which enormously reduces the load on the server.</strong></p>
<div id="attachment_392" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.aheritier.net/wp-content/uploads/2009/05/archiva-open-files.png"><img class="size-medium wp-image-392" title="archiva-open-files" src="http://blog.aheritier.net/wp-content/uploads/2009/05/archiva-open-files-300x65.png" alt="Number of file descriptors simultaneously opened by Archiva" width="300" height="65" /></a><p class="wp-caption-text">Number of file descriptors simultaneously opened by Archiva</p></div>
<div id="attachment_394" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.aheritier.net/wp-content/uploads/2009/05/nexus-open-files.png"><img class="size-medium wp-image-394" title="nexus-open-files" src="http://blog.aheritier.net/wp-content/uploads/2009/05/nexus-open-files-300x65.png" alt="Number of file descriptors simultaneously opened by Nexus" width="300" height="65" /></a><p class="wp-caption-text">Number of file descriptors simultaneously opened by Nexus</p></div>
<h2>Memory consumption</h2>
<p>Even if we had enough RAM, Archiva is a big consumer of memory. <strong>Archiva took an average of 1.3 GB to run. Nexus requires many less and works with 400MB (Even my <a href="http://www.eclipse.org">Eclipse</a> requires more  <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ). It saves almost 1GB that we can now allocate to our builds.</strong></p>
<div id="attachment_391" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.aheritier.net/wp-content/uploads/2009/05/archiva-memory.png"><img class="size-medium wp-image-391" title="archiva-memory" src="http://blog.aheritier.net/wp-content/uploads/2009/05/archiva-memory-300x65.png" alt="Memory consumption by Archiva" width="300" height="65" /></a><p class="wp-caption-text">Memory consumption by Archiva</p></div>
<div id="attachment_393" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.aheritier.net/wp-content/uploads/2009/05/nexus-memory.png"><img class="size-medium wp-image-393" title="nexus-memory" src="http://blog.aheritier.net/wp-content/uploads/2009/05/nexus-memory-300x70.png" alt="Memory consumption by Nexus" width="300" height="70" /></a><p class="wp-caption-text">Memory consumption by Nexus</p></div>
<h2>Not found snapshots</h2>
<p>Sadly this problems always persists. Because migration to Nexus hasn&#8217;t fixed it, we investigated a little bit more and discovered two causes for it :</p>
<ul>
<li>The first one is a bug in Maven (<a href="http://jira.codehaus.org/browse/MNG-4142">MNG-4142</a>) : It&#8217;s a subtle problem halfway between the use of artifacts with classifiers and a corruption of metadata in the local repository.</li>
<li>The second one is a set of bugs in Nexus (<a href="https://issues.sonatype.org/browse/NEXUS-1333">NEXUS-1333</a>, <a href="https://issues.sonatype.org/browse/NEXUS-2036">NEXUS-2036</a>): The scheduled service used to repair metadata deletes them if it cannot read it. The problem is that it doesn&#8217;t succeed to read them if you are using some deprecated properties like {parent.*} (replaced by ${project.parent.*}) or ${pom.*} (replaced by ${project.*}). <em>Note that <a href="https://issues.sonatype.org/browse/NEXUS-2036">NEXUS-2036</a> is marked as fixed on version 1.3.4.</em></li>
</ul>
<h2>Nothing is perfect</h2>
<p>A bug we didn&#8217;t have before appeared with the usage of Nexus. Because of our usage of rewriting rules in apache, Maven now complains that cookies are rejected when we upload artifacts on an internal repository (<a href="https://issues.sonatype.org/browse/NEXUS-1967">NEXUS-1967</a>). This is a minor issue which doesn&#8217;t alter our system, but is annoying because it pollutes our Maven logs on the integration server.</p>
<h2>But we had a good surprise</h2>
<p>Resource savings on the server (IO, RAM) and the quality of Nexus on the speed to upload artifacts (whatever their size) lead to an important improvement of quality of service and stability of the continuous integration server. As you can see below on some graphs taken from different builds in Bamboo there&#8217;s a big difference between before and after Nexus. <strong>Build times decreased and are consistent like never before.</strong></p>
<p><a href="http://blog.aheritier.net/wp-content/uploads/2009/05/chart4.png"><img class="size-medium wp-image-379" title="chart4" src="http://blog.aheritier.net/wp-content/uploads/2009/05/chart4-300x240.png" alt="chart4" width="300" height="240" /></a></p>
<p><a href="http://blog.aheritier.net/wp-content/uploads/2009/05/chart3.png"><img class="size-medium wp-image-378" title="chart3" src="http://blog.aheritier.net/wp-content/uploads/2009/05/chart3-300x240.png" alt="chart3" width="300" height="240" /></a></p>
<p><a href="http://blog.aheritier.net/wp-content/uploads/2009/05/chart2.png"><img class="size-medium wp-image-377" title="chart2" src="http://blog.aheritier.net/wp-content/uploads/2009/05/chart2-300x240.png" alt="chart2" width="300" height="240" /></a></p>
<p><a href="http://blog.aheritier.net/wp-content/uploads/2009/05/chart1.png"><img class="size-medium wp-image-376" title="chart1" src="http://blog.aheritier.net/wp-content/uploads/2009/05/chart1-300x240.png" alt="chart1" width="300" height="240" /></a></p>
<h2>Conclusion</h2>
<p>Did we find the silver bullet ? Of course, no. I have already listed some constraints and problems we had and there are probably many others to discover (the team already has a <a href="https://issues.sonatype.org/secure/IssueNavigator.jspa?reset=true&#038;mode=hide&#038;pid=10001&#038;resolution=-1&#038;sorter/field=updated&#038;sorter/order=DESC">good backlog</a>). Any product can be improved. Despite all that, how could I say something other than&#8230; migrate! It&#8217;s unfortunate for me to have to admit this as a member of the Archiva team, but my own research proves it. Nexus is a product of great quality, which delivers the service you need for your development projects very well. Furthermore, developed by full-time employees (thank you <a href="http://www.sonatype.com">Sonatype</a>), it enjoys an easily accessible and responsive support (I recommend the channel #nexus on #irc.codehaus.org). Archiva itself is governed by the laws of open source, suffers from the lack of time of its maintainers (even if they are doing as much as they can) which doesn&#8217;t help it to stay in the competition. </p>
<p>So, enjoy and benefit from service and quality by adopting Nexus!</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 />
<p><a href="http://feedads.g.doubleclick.net/~a/cVpQ-UB6JMCKjlJmGJDNTy2SN8o/0/da"><img src="http://feedads.g.doubleclick.net/~a/cVpQ-UB6JMCKjlJmGJDNTy2SN8o/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/cVpQ-UB6JMCKjlJmGJDNTy2SN8o/1/da"><img src="http://feedads.g.doubleclick.net/~a/cVpQ-UB6JMCKjlJmGJDNTy2SN8o/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/aheritier-posts/~4/EDcz_Dph1tM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/from-apache-archiva-to-sonatype-nexus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.aheritier.net/from-apache-archiva-to-sonatype-nexus/</feedburner:origLink></item>
		<item>
		<title>N’utilisez pas Hudson 1.344 !!</title>
		<link>http://feedproxy.google.com/~r/aheritier-posts/~3/qZuXEcNJH9k/</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[Retour d'expérience]]></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 est décrite dans l&#8217;issue Jira si par malchance vous avez déjà fait l&#8217;upgrade et [...]<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 />
<p><a href="http://feedads.g.doubleclick.net/~a/WH027TZJB8ePt3_9c_34zEnxWfQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/WH027TZJB8ePt3_9c_34zEnxWfQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/WH027TZJB8ePt3_9c_34zEnxWfQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/WH027TZJB8ePt3_9c_34zEnxWfQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/aheritier-posts/~4/qZuXEcNJH9k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/nutilisez-pas-hudson-1-344/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://blog.aheritier.net/nutilisez-pas-hudson-1-344/</feedburner:origLink></item>
		<item>
		<title>Et une bougie de plus !!</title>
		<link>http://feedproxy.google.com/~r/aheritier-posts/~3/hFqGL51ykBI/</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 de ce mouvement avec un nombre impressionnant de Java Users Groups nés en deux ans.

Ce [...]<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 />
<p><a href="http://feedads.g.doubleclick.net/~a/FidlOJwXA1zeraFFo4RWfi0FPYU/0/da"><img src="http://feedads.g.doubleclick.net/~a/FidlOJwXA1zeraFFo4RWfi0FPYU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/FidlOJwXA1zeraFFo4RWfi0FPYU/1/da"><img src="http://feedads.g.doubleclick.net/~a/FidlOJwXA1zeraFFo4RWfi0FPYU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/aheritier-posts/~4/hFqGL51ykBI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/et-une-bougie-de-plus/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blog.aheritier.net/et-une-bougie-de-plus/</feedburner:origLink></item>
		<item>
		<title>JavaEE 6, Spring, Hibernate Search et Maven en dédicace au Paris JUG de Décembre</title>
		<link>http://feedproxy.google.com/~r/aheritier-posts/~3/TE9vaGR9DaU/</link>
		<comments>http://blog.aheritier.net/javaee-6-spring-hibernate-search-et-maven-en-dedicace-au-paris-jug-de-decembre/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 10:00:38 +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=803</guid>
		<description><![CDATA[Petite brève pour vous annoncer que Nicolas et moi-même seront tous les deux au prochain Paris JUG, le mardi 8 décembre.
Cette soirée sera consacrée à Java EE 6 et Spring 3.0 et aura lieu dans les locaux de l&#8217;ISEP (au 28 Rue Notre Dame des Champs 75006 Paris).
A cette occasion une séance de dédicaces sera [...]<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://parisjug.org/"><img src="http://blog.aheritier.net/wp-content/uploads/2009/12/parisJugSmallH.png" alt="ParisJUG" title="ParisJUG" width="228" height="105" class="alignright size-full wp-image-806" /></a>Petite brève pour vous annoncer que Nicolas et moi-même seront tous les deux au prochain <a href="http://parisjug.org">Paris JUG</a>, le mardi 8 décembre.<br />
<a href="http://parisjug.org/xwiki/bin/view/Meeting/20091208">Cette soirée sera consacrée à Java EE 6 et Spring 3.0</a> et aura lieu dans les locaux de <a href="http://parisjug.org/xwiki/bin/view/Location/ISEP">l&#8217;ISEP</a> (au 28 Rue Notre Dame des Champs 75006 Paris).<br />
A cette occasion une séance de dédicaces sera organisée par la librairie <a href="http://www.lmet.fr"><em>Le monde en tique</em></a> (quelques exemplaires seront disponibles à la vente). Elle aura lieu à la cafétéria (au sous-sol) pendant la pause à partir d&#8217;environ 20h25.<br />
<span id="more-803"></span><br />
Nous serons plusieurs auteurs, alors profitez-en si vous voulez nous rencontrer :</p>
<ul>
<li><a href="http://www.apress.com/book/view/1430219548">Beginning Java EE 6</a> &#8211; Apress &#8211; <a href="http://twitter.com/agoncal">Antonio Goncalves</a></li>
<li><a href="http://www.eyrolles.com/Informatique/Livre/spring-par-la-pratique-9782212124217">Spring par la pratique</a> &#8211; Eyrolles &#8211; <a href="http://twitter.com/juliendubois">Julien Dubois</a></li>
<li><a href="http://www.manning.com/bernard/">Hibernate Search</a> &#8211; Manning &#8211; <a href="http://twitter.com/emmanuelbernard">Emmanuel Bernard</a></li>
<li><a href="http://www.pearson.fr/livre/index.cfm?gcoi=27440100730370">Apache Maven</a> &#8211; Pearson &#8211; <a href="http://twitter.com/ndeloof">Nicolas De loof</a>, <a href="http://twitter.com/aheritier">Arnaud Héritier</a></li>
</ul>
<p><img src="http://blog.aheritier.net/wp-content/uploads/2009/12/JavaEE6.gif" alt="Beginning Java™ EE 6 Platform with GlassFish™ 3: From Novice to Professional" title="Beginning Java™ EE 6 Platform with GlassFish™ 3: From Novice to Professional" width="125" height="164" class="alignnone size-full wp-image-821" /><img src="http://blog.aheritier.net/wp-content/uploads/2009/12/Spring.gif" alt="Spring par la pratique" title="Spring par la pratique" width="108" height="130" class="alignnone size-full wp-image-822" /><br />
<img src="http://blog.aheritier.net/wp-content/uploads/2009/12/hibernateSearch.jpg" alt="Hibernate Search in Action" title="Hibernate Search in Action" width="150" height="188" class="alignnone size-full wp-image-823" /><img src="http://blog.aheritier.net/wp-content/uploads/2009/12/ApacheMaven.gif" alt="Apache Maven" title="Apache Maven" width="152" height="188" class="alignnone size-full wp-image-824" /></p>
<p>Je n&#8217;ai plus qu&#8217; à sortir m&#8217;acheter un stylo (il va falloir qu je me souvienne comment on l&#8217;utilise !).</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 />
<p><a href="http://feedads.g.doubleclick.net/~a/POMGxpeRB6ATnNH4DzM8j67VD1Q/0/da"><img src="http://feedads.g.doubleclick.net/~a/POMGxpeRB6ATnNH4DzM8j67VD1Q/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/POMGxpeRB6ATnNH4DzM8j67VD1Q/1/da"><img src="http://feedads.g.doubleclick.net/~a/POMGxpeRB6ATnNH4DzM8j67VD1Q/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/aheritier-posts/~4/TE9vaGR9DaU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/javaee-6-spring-hibernate-search-et-maven-en-dedicace-au-paris-jug-de-decembre/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.aheritier.net/javaee-6-spring-hibernate-search-et-maven-en-dedicace-au-paris-jug-de-decembre/</feedburner:origLink></item>
		<item>
		<title>Apache Maven, enfin un livre en français et en PDF !!!</title>
		<link>http://feedproxy.google.com/~r/aheritier-posts/~3/T-Q3eyNagvc/</link>
		<comments>http://blog.aheritier.net/apache-maven-enfin-un-livre-en-francais-et-en-pdf/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 14:59:00 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Apache Maven]]></category>
		<category><![CDATA[Communauté]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=797</guid>
		<description><![CDATA[Bonjour,
Rapide news pour vous annoncer que depuis aujourd&#8217;hui vous pouvez acheter sur le site Pearson notre livre au format PDF. Cette version est donc un peu moins cher (27,20 € au lieu des 32€). 
MAJ 04 Décembre 2009 : Pendant le mois de décembre sur le site pearson pour l&#8217;achat de la copie imprimée, la [...]<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>Bonjour,</p>
<div id="attachment_713" class="wp-caption alignright" style="width: 238px"><a href="http://www.pearson.fr/livre/index.cfm?gcoi=27440100730370"><img class="size-full wp-image-713" title="Apache Maven" src="http://blog.aheritier.net/wp-content/uploads/2010/01/Couverture-v02-reduced.png" alt="Pearson - Apache Maven" width="228" height="270" /></a><p class="wp-caption-text">Pearson - Apache Maven</p></div>
<p>Rapide news pour vous annoncer que depuis aujourd&#8217;hui vous pouvez acheter sur le site <a href="http://www.pearson.fr/livre/index.cfm?gcoi=27440100730370">Pearson</a> notre livre au format PDF. Cette version est donc un peu moins cher (27,20 € au lieu des 32€). </p>
<p><strong>MAJ 04 Décembre 2009</strong> : Pendant le mois de décembre sur le <a href="http://www.pearson.fr/livre/?GCOI=27440100730370">site pearson</a> pour l&#8217;achat de la copie imprimée, la version PDF est offerte.</p>
<p>Bonne lecture.</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 />
<p><a href="http://feedads.g.doubleclick.net/~a/1F-yb7yNEMAlaU4q2OKvwx06FW4/0/da"><img src="http://feedads.g.doubleclick.net/~a/1F-yb7yNEMAlaU4q2OKvwx06FW4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/1F-yb7yNEMAlaU4q2OKvwx06FW4/1/da"><img src="http://feedads.g.doubleclick.net/~a/1F-yb7yNEMAlaU4q2OKvwx06FW4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/aheritier-posts/~4/T-Q3eyNagvc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/apache-maven-enfin-un-livre-en-francais-et-en-pdf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.aheritier.net/apache-maven-enfin-un-livre-en-francais-et-en-pdf/</feedburner:origLink></item>
		<item>
		<title>Apache Maven, enfin un livre en français !!!</title>
		<link>http://feedproxy.google.com/~r/aheritier-posts/~3/rlKQgyo3C3Q/</link>
		<comments>http://blog.aheritier.net/apache-maven-enfin-un-livre-en-francais/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 09:00:43 +0000</pubDate>
		<dc:creator>Arnaud Héritier</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Apache Maven]]></category>
		<category><![CDATA[Communauté]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=725</guid>
		<description><![CDATA[Ca y est, il est là !!!
Il est né le divin enfant &#8230;. Oui, le père noël est un peu en avance cette année   Et pourtant, est ce qu&#8217;il n&#8217;est pas beau notre cadeau ? Notre livre en français (co-écrit avec Nicolas De loof) consacré à Maven est dans toutes les librairies dès [...]<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=8.5" /></div><div>Rating: 8.5/<strong>10</strong> (4 votes cast)</div><br />]]></description>
			<content:encoded><![CDATA[<div id="attachment_713" class="wp-caption alignright" style="width: 238px"><a href="http://www.pearson.fr/livre/index.cfm?gcoi=27440100730370"><img class="size-full wp-image-713" title="Apache Maven" src="http://blog.aheritier.net/wp-content/uploads/2010/01/Couverture-v02-reduced.png" alt="Pearson - Apache Maven" width="228" height="270" /></a><p class="wp-caption-text">Pearson - Apache Maven</p></div>
<h2>Ca y est, il est là !!!</h2>
<p>Il est né le divin enfant &#8230;. Oui, le père noël est un peu en avance cette année <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Et pourtant, est ce qu&#8217;il n&#8217;est pas beau notre cadeau ? Notre livre <strong>en français</strong> (co-écrit avec <a href="http://blog.loof.fr/">Nicolas De loof</a>) consacré à <a href="http://maven.apache.org">Maven</a> est dans toutes les librairies dès ce matin (<a href="http://www.pearson.fr/livre/index.cfm?gcoi=27440100730370">Pearson</a>, <a href="http://www.amazon.fr/Apache-Maven-Nicolas-loof/dp/274402337X/wwwdeveloppec-21?tag=citofgamonlco-20">Amazon</a>, <a href="http://livre.fnac.com/a2748495/Nicolas-de-Loof-Apache-Maven?PID=1&amp;Mn=-1&amp;Mu=-13&amp;Ra=-1&amp;To=0&amp;Nu=1&amp;Fr=0">FNAC</a>, <a href="http://www.lmet.fr/GSWeb/lmet.gswa/4/dr/CSHOPDirectAccess/getProduct/PK=636F64653D333331343335?HPLResultsID=70726F64756374734C697374547970652D31367C626173654C69737449442D7365617263684D6F64656C7C76616C75653D6D6176656E7C&amp;gswsid=2B4E034BCEFC59E0289AFA13E9338C13AE3E6F8C">Le monde en &laquo;&nbsp;tique&nbsp;&raquo;</a>, &#8230;).<br />
<span id="more-725"></span></p>
<h2>Pffff, c&#8217;était pas gagné !</h2>
<p>Il aura fallu un an entre le premier mail avec notre éditeur <a href="http://www.pearson.fr/">Pearson</a> et sa publication aujourd&#8217;hui. Bien sûr pas à temps plein, nous avons un véritable travail (de temps en temps) et aussi une de famille (et oui le geek se reproduit ..  <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ). Pour arriver au résultat escompté, cela nous aura demandé quelques efforts, de la discipline, de la patience (<strong>la stabilité de M$ Word est pitoyable dès que le document commence à faire quelques pages</strong>) et du temps (pas mal d&#8217;après-midi de week-end pour l&#8217;un et de soirées/nuits pour l&#8217;autre). Mais voilà il est là et nous avons tout de même pris beaucoup de plaisir à le rédiger.</p>
<h2>Alors pourquoi avoir relevé ce défi ?</h2>
<p>Parce que nous aimons partager nos connaissances, mais aussi les challenges. Et oui, pour des geeks comme nous qui passeraient bien leurs journées et nuits à coder (euhhh, c&#8217;est ce que l&#8217;on fait d&#8217;ailleurs ??), sortir un traitement de texte n&#8217;est pas vraiment notre plus grand plaisir.<br />
Cela fait 6 ans environ que tous les deux nous utilisons Maven et ce dernier nous a rendu de très grands services dans des contextes très variés. Pourtant il faut avouer que dans les diverses équipes que nous avons pu croiser son adoption était loin d&#8217;être évidente, voir même catastrophique.<br />
En questionnant ceux qui avaient tant de difficultés avec l&#8217;outil nous nous rendions compte que les causes du mal étaient souvent similaires : Les équipes n&#8217;ont pas le temps ( et ne prennent pas le temps ) de comprendre l&#8217;outil. En effet la documentation sur le site web et les wikis est plutôt rebutante et désorganisée.<br />
Il existe pourtant déjà plusieurs livres disponibles gratuitement en téléchargement (<a href="http://www.sonatype.com/documentation/books/maven-defguide">Maven: The Definitive Guide</a>, <a href="http://www.maestrodev.com/better-build-maven">Better Builds with Maven</a>) ou plus classiquement en librairie (<a href="http://www.packtpub.com/apache-maven-2-effective-implementations/book">Apache Maven 2 Effective Implementation</a>). Mais la réputation des français et de leur rapport avec les langues étrangères n&#8217;est plus à faire. C&#8217;est peine perdu. L&#8217;idée de digérer 300 pages, ou plus, en anglais sur un sujet pas obligatoirement distrayant n&#8217;est guère motivante.<br />
Avec Nicolas nous avons donc décidé d&#8217;apporter notre contribution à la communauté Maven francophone en écrivant un livre original sur le sujet qui puisse permette à tout le monde, du débutant à l&#8217;expert d&#8217;apprendre sans s&#8217;ennuyer.</p>
<h2>C&#8217;est un long roman, c&#8217;est une belle histoire &#8230;.</h2>
<p>Ce livre est donc construit comme un roman avec de l&#8217;action, du suspense, de l&#8217;amour et des trahisons. Bon j&#8217;exagère un peu, nous sommes loin des grands classiques de la littérature mais nous avons fait notre possible pour contextualiser l&#8217;ensemble de nos explications. Nous avons tout simplement repris les expériences que nous avons vécu ces dernières années et nous avons bâti le livre dessus. Pour illustrer tous nos propos, nous avons choisi de raconter l&#8217;évolution d&#8217;une entreprise. Nous démarrons sur une start-up construite par deux copains pour en arriver jusqu&#8217;à son intégration dans une multinationale avec toutes les rencontres enrichissantes qu&#8217;ils ont pu faire en chemin.<br />
Ainsi nous montrons à la fois ce que Maven apporte localement à un projet qui démarre et ce qu&#8217;il apporte pour l&#8217;entreprise qui souhaite standardiser ses développements et réduire à long terme le coût du &laquo;&nbsp;build&nbsp;&raquo; de ses projets. Notre livre n&#8217;a pas pour but d&#8217;être exhaustif. Vous ne trouverez pas dedans la documentation détaillée de la vingtaine d&#8217;options du plugin &laquo;&nbsp;compiler&nbsp;&raquo;. Par contre, nous vous expliquons les cas d&#8217;usages les plus récurrents de Maven, tirés de nos expériences du terrain, et comment sur ces cas précis il faut le mettre en oeuvre. Nous expliquons avant tout pourquoi Maven est ainsi fait, et nous détaillons tous les concepts que vous serez amener à manipuler. Notre but est que vous compreniez l&#8217;outil et son fonctionnement afin que vous l&#8217;utilisiez de la manière la plus adéquate possible. Les sujets couverts sont variés :</p>
<ul>
<li>le descripteur de projet (POM),</li>
<li>les dépendances et les librairies (gestion des dépots),</li>
<li>le paramétrage de la construction du projet (utilisation de langages alternatifs comme groovy, &#8230;),</li>
<li>les tests unitaires, d&#8217;intégration (dbunit,&#8230;), d&#8217;ihm(selenium), fonctionnels (fitnesse), de performance (jmeter), &#8230;</li>
<li>les projets JEE,</li>
<li>l&#8217;intégration aux environnements de développement (eclipse, netbeans, intellij),</li>
<li>l&#8217;automatisation du processus de livraison,</li>
<li>la gestion de la qualité (pmd, checkstyle, findbugs, sonar, &#8230;),</li>
<li>l&#8217;écriture de plugins Maven,</li>
<li>le packaging sur mesure (assembly),</li>
<li>les modèles de projets (archetypes),</li>
<li>l&#8217;avenir de Maven (boule de crystal es-tu là ?)</li>
<li>&#8230; (je dois en oublier)</li>
</ul>
<p>Nous espérons que vous trouverez dans cet ouvrage tout ce qu&#8217;il vous manquait pour comprendre Maven et l&#8217;apprécier à sa juste valeur. Nous avons fait notre possible pour diffuser autant de connaissances que possible (même entre nous nous avons réussi à découvrir des choses <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ).  L&#8217;idéal serait que vous preniez autant de plaisir à le lire que nous en avons eu à l&#8217;écrire car notre but est réellement que vous ayez envie d&#8217;aller jusqu&#8217;à la dernière page.</p>
<p>Nous vous souhaitons une bonne lecture. N&#8217;hésitez pas à nous faire part de vos commentaires. La perfection n&#8217;existe pas et nous adorons nous améliorer.</p>
<p><strong>A noter :</strong> L&#8217;ouvrage <a href="http://www.sonatype.com/documentation/books/maven-defguide">Maven: The Definitive Guide</a>, aka &laquo;&nbsp;Le gros pavé de référence&nbsp;&raquo; est en cours de traduction et devrait être disponible d&#8217;ici quelques mois. Ce dernier pourra faire un bon complément à notre ouvrage pour creuser un sujet spécifique sur Maven.</p>
<h2>Qui est qui ?</h2>
<p>Les personnages ci-dessous sont les protagonistes de l&#8217;histoire contée dans notre livre. Ce sont des francophones de la communauté Java ou Maven. Je vous laisse les commentaires pour essayer de les trouver (les ressemblances ne sont parfois pas évidentes <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ). Vous avez toutes les réponses à la fin de notre ouvrage donc ne trichez pas !<br />
<div class="ngg-galleryoverview" id="ngg-gallery-1-725">


	<!-- Piclense link -->
	<div class="piclenselink">
		<a class="piclenselink" href="javascript:PicLensLite.start({feedUrl:'http://blog.aheritier.net/wp-content/plugins/nextgen-gallery/xml/media-rss.php?gid=1&amp;mode=gallery'});">
			[View with PicLens]		</a>
	</div>
	
	<!-- Thumbnails -->
		
	<div id="ngg-image-1" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangaantonio_0.png" title="Antonio" class="shutterset_set_1" >
								<img title="Antonio" alt="Antonio" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangaantonio_0.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-2" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangaarnaud_0.png" title="Arnaud" class="shutterset_set_1" >
								<img title="Arnaud" alt="Arnaud" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangaarnaud_0.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-3" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangacarlos_0.png" title="Carlos" class="shutterset_set_1" >
								<img title="Carlos" alt="Carlos" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangacarlos_0.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-4" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangaemmanuel_1.png" title="Emmanuel" class="shutterset_set_1" >
								<img title="Emmanuel" alt="Emmanuel" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangaemmanuel_1.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-5" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangafabrice_1.png" title="Fabrice" class="shutterset_set_1" >
								<img title="Fabrice" alt="Fabrice" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangafabrice_1.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-6" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangafrancois_1.png" title="François" class="shutterset_set_1" >
								<img title="François" alt="François" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangafrancois_1.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-7" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangaguillaume_1.png" title="Guillaume" class="shutterset_set_1" >
								<img title="Guillaume" alt="Guillaume" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangaguillaume_1.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-8" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangaherve_1.png" title="Hervé" class="shutterset_set_1" >
								<img title="Hervé" alt="Hervé" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangaherve_1.png" width="74" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-9" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangajason_1.png" title="Jason" class="shutterset_set_1" >
								<img title="Jason" alt="Jason" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangajason_1.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-10" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangajim.png" title="Jim" class="shutterset_set_1" >
								<img title="Jim" alt="Jim" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangajim.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-11" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangalukas.png" title="Lukas" class="shutterset_set_1" >
								<img title="Lukas" alt="Lukas" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangalukas.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-12" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/manganicolas.png" title="Nicolas" class="shutterset_set_1" >
								<img title="Nicolas" alt="Nicolas" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_manganicolas.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-13" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangaolivier.png" title="Olivier" class="shutterset_set_1" >
								<img title="Olivier" alt="Olivier" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangaolivier.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-14" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangaraphael.png" title="Raphaël" class="shutterset_set_1" >
								<img title="Raphaël" alt="Raphaël" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangaraphael.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-15" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangasebastien.png" title="Sébastien" class="shutterset_set_1" >
								<img title="Sébastien" alt="Sébastien" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangasebastien.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-16" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangastephane.png" title="Stéphane" class="shutterset_set_1" >
								<img title="Stéphane" alt="Stéphane" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangastephane.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-17" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangavincentm.png" title="Vincent" class="shutterset_set_1" >
								<img title="Vincent" alt="Vincent" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangavincentm.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-18" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/mangavincents.png" title="Vincent" class="shutterset_set_1" >
								<img title="Vincent" alt="Vincent" src="http://blog.aheritier.net/wp-content/gallery/personnagespearsonapachemaven/thumbs/thumbs_mangavincents.png" width="75" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<h2>Le descriptif officiel</h2>
<p><strong>Editeur :</strong> <a href="http://www.pearson.fr">Pearson France</a><br />
<strong>Collection :</strong> Référence<br />
<strong>Auteurs :</strong> Nicolas De loof, Arnaud Héritier<br />
<strong>Niveau :</strong> Tous niveaux<br />
<strong>Catégorie :</strong> Programmation<br />
<strong>Prix :</strong> 32 €<br />
<strong>Référence :</strong> 978-2-7440-2337-8<br />
<strong>Date de parution :</strong> 20 Novembre 2009</p>
<p>Maven, l&#8217;outil open-source de gestion et d&#8217;automatisation de développement Java, a le vent en poupe. Les raisons : il systématise, rationalise et simplifie le développement collaboratif de projets Java, faisant gagner aux entreprises comme aux développeurs du temps et de l&#8217;argent !</p>
<p>Les auteurs, membres de l&#8217;équipe de développement Maven, aidés par toute la communauté francophone, ont imaginé de présenter Maven 2 sous un angle original et didactique, à travers un projet fictif, inspiré de leurs expériences sur le terrain, dont ils détaillent toutes les phases successives. Ce projet évolue au fil des besoins et de la contribution de développeurs aux profils différents, vous familiarisant avec les concepts fondamentaux de Maven et leur mise en œuvre pratique, mais aussi avec les fonctionnalités plus avancées. Vous profitez également des recommandations et bonnes pratiques pour optimiser votre utilisation de Maven.</p>
<p>Vous découvrez ainsi de manière ludique et grâce à des exemples concrets le potentiel de Maven, et tous les avantages qu&#8217;il peut apporter à vos propres projets.</p>
<h3>Sommaire</h3>
<ul>
<li>Introduction</li>
<li>Au-delà de java.lang</li>
<li>Un peu plus que compiler</li>
<li>Mettre en place des tests unitaires</li>
<li>Mettre en place des tests d&#8217;intégration</li>
<li>Gestion avancée des dépendances</li>
<li>Quand le projet devient trop lourd</li>
<li>Maven et JEE</li>
<li>Maven et les IDE</li>
<li>Le jour J : la livraison</li>
<li>Utiliser un outil non supporté</li>
<li>L&#8217;assurance qualité</li>
<li>Respecter un format de distribution</li>
<li>Un nouveau projet démarre</li>
<li>Avons-nous fait le bon choix</li>
<li>Nos recommandations</li>
<li>Épilogue</li>
<li>Lexique</li>
</ul>
<h3>À propos des auteurs</h3>
<p><strong>Nicolas De loof </strong>est techno-veilleur et architecte Java pour une grande SSII française. Avec 12 ans de développement dans ses bagages, il a rejoint l&#8217;équipe de développement Maven en 2007, en particulier pour le support de GWT. Créateur du <a href="http://breizhjug.org/">BreizhJug</a>, groupe d&#8217;utilisateurs de Java Rennais, en 2008, il participe activement au microcosme Java francophone.<br />
<strong>Arnaud Héritier</strong> est responsable des pratiques et outils de développement chez <a href="http://www.exoplatform.com">eXo Platform</a>. Cela fait 10 ans qu&#8217;il participe aux développements d&#8217;applications en Java que ce soit en tant que programmeur ou architecte. Il contribue à différents projets open-sources et en particulier à Maven dont il a rejoint l&#8217;équipe de développement Maven en 2004 et a intégré son comité de direction en 2005.</p>
<br /><div><img src="http://blog.aheritier.net/wp-content/plugins/gd-star-rating/gfx.php?value=8.5" /></div><div>Rating: 8.5/<strong>10</strong> (4 votes cast)</div><br />
<p><a href="http://feedads.g.doubleclick.net/~a/JNrlX60Qfa_XeTv0qjeK1YUkKVk/0/da"><img src="http://feedads.g.doubleclick.net/~a/JNrlX60Qfa_XeTv0qjeK1YUkKVk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/JNrlX60Qfa_XeTv0qjeK1YUkKVk/1/da"><img src="http://feedads.g.doubleclick.net/~a/JNrlX60Qfa_XeTv0qjeK1YUkKVk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/aheritier-posts/~4/rlKQgyo3C3Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/apache-maven-enfin-un-livre-en-francais/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://blog.aheritier.net/apache-maven-enfin-un-livre-en-francais/</feedburner:origLink></item>
		<item>
		<title>Apache Maven au pays du Pastis le 12 Novembre !!</title>
		<link>http://feedproxy.google.com/~r/aheritier-posts/~3/FHfdHQma4Bs/</link>
		<comments>http://blog.aheritier.net/apache-maven-au-pays-du-pastis-le-12-novembre/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 23:32:57 +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=692</guid>
		<description><![CDATA[Après avoir  écrasé quelques fourmis (et ciré mes chaussures parce que ça tache ces petites choses là) me revoilà parti sur les routes. Je quitte la douce pluie Normande pour m&#8217;arrêter le 12 Novembre prochain au pays du pastis, de la bouillabaisse, de l&#8217;aïoli et je l&#8217;espère du soleil : Marseille.

La session du MarsJUG [...]<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><img src="http://blog.aheritier.net/wp-content/uploads/2009/11/maventxt_logo_200.png" alt="maventxt_logo_200" title="maventxt_logo_200" width="200" height="53" class="alignright size-full wp-image-696" />Après avoir <a href="http://blog.aheritier.net/la-bataille-des-titans-au-normandyjug/" title="La bataille des titans au NormandyJUG !" > écrasé quelques fourmis</a> (et ciré mes chaussures parce que ça tache ces petites choses là) me revoilà parti sur les routes. Je quitte la douce pluie Normande pour m&#8217;arrêter <a href="http://www.marsjug.org/">le 12 Novembre prochain</a> au pays du pastis, de la bouillabaisse, de l&#8217;aïoli et je l&#8217;espère du soleil : Marseille.<br />
<span id="more-692"></span><br />
La session du MarsJUG de Novembre sera totalement dédiée à Maven. On va donc pouvoir en parler en long, en large, et en travers. La présentation sera découpée en deux parties. La première reviendra sur les fondamentaux de Maven : Pourquoi ? Comment ? Cela permettra à tout le monde de rentrer dans le sujet même sans connaissance préalable. Dans la seconde partie nous rentrerons plus en détail sur les cas d&#8217;utilisation tirés du terrain que l&#8217;on peut retrouver en entreprise (et ailleurs). Nous verrons les règles qui sont importantes de suivre et ce qu&#8217;il ne faut surtout pas faire. <img src="http://blog.aheritier.net/wp-content/uploads/2009/11/marsJUG.png" alt="Marseille JUG" title="marsJUG" width="369" height="100" class="size-full wp-image-693" /></p>
<p>Je vous promet une soirée sans langue de bois. Ceux qui me connaissent savent que je n&#8217;ai pas ma langue dans ma poche, et que je n&#8217;hésite pas à critiquer l&#8217;outil lorsque cela est fondé. Je vous donne donc rendez-vous le 12 Novembre et <a href="http://www.jugevents.org:80/jugevents/event/20645">n&#8217;oubliez pas de vous inscrire</a>. Si vous souhaitez voir des sujets particuliers traités pendant la session ou encore si vous avez des questions, n&#8217;hésitez pas à m&#8217;en parler via les commentaires de cet article. J&#8217;ai encore tout le temps d&#8217;adapter le contenu à vos demandes.</p>
<p><b>MAJ du 14 Novembre 2009</b><br />
Ci-dessous retrouvez les slides de la session.<br />
<object width="650" height="533"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=20091112-marsjug-v1-091113032106-phpapp02"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=20091112-marsjug-v1-091113032106-phpapp02"  type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="650" height="533"></embed></object><!-- ysttest:Array
(
    [id] => 2490861&#038;doc=20091112-marsjug-v1-091113032106-phpapp02
)
--></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 />
<p><a href="http://feedads.g.doubleclick.net/~a/sDj6MKiofIYHOfZRo5cxXnS6vr0/0/da"><img src="http://feedads.g.doubleclick.net/~a/sDj6MKiofIYHOfZRo5cxXnS6vr0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/sDj6MKiofIYHOfZRo5cxXnS6vr0/1/da"><img src="http://feedads.g.doubleclick.net/~a/sDj6MKiofIYHOfZRo5cxXnS6vr0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/aheritier-posts/~4/FHfdHQma4Bs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/apache-maven-au-pays-du-pastis-le-12-novembre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.aheritier.net/apache-maven-au-pays-du-pastis-le-12-novembre/</feedburner:origLink></item>
		<item>
		<title>La bataille des titans au NormandyJUG !</title>
		<link>http://feedproxy.google.com/~r/aheritier-posts/~3/XbCzoG3Clqg/</link>
		<comments>http://blog.aheritier.net/la-bataille-des-titans-au-normandyjug/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 23:30:09 +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 User Group]]></category>

		<guid isPermaLink="false">http://blog.aheritier.net/?p=665</guid>
		<description><![CDATA[Ce mardi, le 20 Octobre, au NormandyJUG, Je défendrai haut et fort les couleurs d&#8217;Apache Maven dans un combat sans merci face à quelques outils &#171;&#160;concurrents&#160;&#187; (?).

Apache Ivy : Gestionnaire de dépendances très connu pour son intégration avec Apache Ant il offre une solution qui se veut simple et évolutive pour gérer ses librairies dans [...]<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://maven.apache.org"><img src="http://blog.aheritier.net/wp-content/uploads/2009/10/maven_logo.png" alt="Apache Maven" title="Apache Maven" width="100" height="18" class="alignright size-full wp-image-680" /></a>Ce mardi, le 20 Octobre, au <a href="http://www.normandyjug.org/">NormandyJUG</a>, Je défendrai haut et fort les couleurs d&#8217;<a href="http://maven.apache.org">Apache Maven</a> dans un combat sans merci face à quelques outils &laquo;&nbsp;concurrents&nbsp;&raquo; (?).</p>
<p><span id="more-665"></span></p>
<p><a href="http://ant.apache.org/ivy/"><img src="http://blog.aheritier.net/wp-content/uploads/2009/10/ivy.png" alt="Apache Ivy" title="Apache Ivy" width="100" height="75" class="alignleft size-full wp-image-679" /></a><a href="http://ant.apache.org/ivy/">Apache Ivy</a> : Gestionnaire de dépendances très connu pour son intégration avec <a href="http://ant.apache.org/">Apache Ant</a> il offre une solution qui se veut simple et évolutive pour gérer ses librairies dans différents types et formats de référentiels. <a href="http://xhab.blogspot.com/">Xavier Hanin</a>, créateur du projet, devrait le défendre en visio conférence (si je ne débranche pas interet <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).</p>
<p><a href="http://www.easyant.org"><img src="http://blog.aheritier.net/wp-content/uploads/2009/10/easyant.jpg" alt="EasyAnt" title="EasyAnt" width="100" height="38" class="alignright size-full wp-image-681" /></a><a href="http://www.easyant.org">EasyAnt</a> : A mi-chemin entre Ant et Maven, cet outil offre toute la souplesse du premier tout en simplifiant l&#8217;utilisation par des développeurs en supportant de nombreuses conventions du deuxième. Il étend l&#8217;offre technique de Ant à l&#8217;aide d&#8217;une architecture extensible à base de plugins et intègre nativement des services de plus haut niveaux comme Ivy. EasyAnt sera défendu par le créateur du projet :<a href="http://www.linkedin.com/pub/jean-louis-boudart/a/829/533"> Jean-Louis Boudart</a>.</p>
<p><a href="http://www.gradle.org"><img src="http://blog.aheritier.net/wp-content/uploads/2009/10/gradle.jpg" alt="Gradle" title="Gradle" width="100" height="45" class="alignleft size-full wp-image-682" /></a><a href="http://www.gradle.org">Gradle</a> : Dans lignée de EasyAnt, Gradle est un outil de build orienté scripts qui apporte un niveau de services &laquo;&nbsp;à la maven&nbsp;&raquo; (gestion des dépendances, build multi-modules, &#8230;). Par contre ce dernier à la grande particularité de lever les &laquo;&nbsp;limitations&nbsp;&raquo; (?) du langage XML pour offrir un véritable langage de scripts : <a href="http://groovy.codehaus.org/">Groovy</a>. Gradle sera défendu par <a href="http://www.boissinot.net/">Grégory Boissinot</a>,consultant chez <a href="http://zenika.com/">Zenika</a>.</p>
<p>Nous nous attacherons tous à vous montrer les spécificités de nos produits, leurs avantages, et nous n&#8217;hésiterons pas à décrier les inconvénients des autres <img src='http://blog.aheritier.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . De manière plus constructive, nous vous expliquerons quels sont les cas que les produits adressent le mieux et comment ils peuvent devenir complémentaires. </p>
<p>Venez nombreux à assister à ce match du siècle et n&#8217;oubliez pas de vous <a href="http://jugevents.org/jugevents/event/show.html?id=19959">inscrire</a> !!</p>
<div id="attachment_687" class="wp-caption aligncenter" style="width: 660px"><a href="http://www.normandyjug.org/"><img src="http://blog.aheritier.net/wp-content/uploads/2009/10/affiche-200910201.png" alt="Builders Battle au NormandyJUG" title="Affiche" width="650" height="925" class="size-full wp-image-687" /></a><p class="wp-caption-text">Builders Battle au NormandyJUG</p></div>
<p><b>MAJ du 21 octobre 2009</b><br />
Ci-dessous retrouvez les slides de la session.<br />
<object width="650" height="533"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=normandyjug20091020buildersbattle-091021035313-phpapp02"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=normandyjug20091020buildersbattle-091021035313-phpapp02"  type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="650" height="533"></embed></object><!-- ysttest:Array
(
    [id] => 2305322&#038;doc=normandyjug20091020buildersbattle-091021035313-phpapp02
)
--></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 />
<p><a href="http://feedads.g.doubleclick.net/~a/F7K3SllrfKGTX5JmU41hF6o5kzE/0/da"><img src="http://feedads.g.doubleclick.net/~a/F7K3SllrfKGTX5JmU41hF6o5kzE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/F7K3SllrfKGTX5JmU41hF6o5kzE/1/da"><img src="http://feedads.g.doubleclick.net/~a/F7K3SllrfKGTX5JmU41hF6o5kzE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/aheritier-posts/~4/XbCzoG3Clqg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.aheritier.net/la-bataille-des-titans-au-normandyjug/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://blog.aheritier.net/la-bataille-des-titans-au-normandyjug/</feedburner:origLink></item>
	</channel>
</rss><!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
