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

<channel>
	<title>Everything is wrong &#187; Maven</title>
	<atom:link href="http://everythingiswrong.free.fr/index.php/category/maven/feed/" rel="self" type="application/rss+xml" />
	<link>http://everythingiswrong.free.fr</link>
	<description>Un blog dédié à l&#039;informatique en général</description>
	<lastBuildDate>Wed, 06 Oct 2021 21:20:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>J2EE7 &#8211; Pom minimal</title>
		<link>http://everythingiswrong.free.fr/index.php/2014/07/15/j2ee7-pom-minimal/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2014/07/15/j2ee7-pom-minimal/#comments</comments>
		<pubDate>Tue, 15 Jul 2014 21:52:15 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://everythingiswrong.free.fr/?p=3135</guid>
		<description><![CDATA[Créer un simple projet Java J2EE7 avec Maven]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">J&#8217;ai souvent utilisé l&#8217;archetype Maven <a href="http://mvnrepository.com/artifact/org.jboss.spec.archetypes/jboss-javaee6-webapp-archetype" target="_blank">jboss-javaee6-webapp-archetype</a> pour commencer un projet J2EE6. En cherchant sur internet la version suivante pour un projet de type J2EE7, j&#8217;ai découvert ce fichier <code>pom.xml</code> minimaliste :</p>
<pre class="brush: xml; gutter: true; first-line: 1">&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;
    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
    &lt;groupId&gt;groupId&lt;/groupId&gt;
    &lt;artifactId&gt;artifactId&lt;/artifactId&gt;
    &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
    &lt;packaging&gt;war&lt;/packaging&gt;
    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;javax&lt;/groupId&gt;
            &lt;artifactId&gt;javaee-api&lt;/artifactId&gt;
            &lt;version&gt;7.0&lt;/version&gt;
            &lt;scope&gt;provided&lt;/scope&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
    &lt;build&gt;
        &lt;finalName&gt;${artifactId}&lt;/finalName&gt;
    &lt;/build&gt;
    &lt;properties&gt;
        &lt;maven.compiler.source&gt;1.8&lt;/maven.compiler.source&gt;
        &lt;maven.compiler.target&gt;1.8&lt;/maven.compiler.target&gt;
        &lt;failOnMissingWebXml&gt;false&lt;/failOnMissingWebXml&gt;
    &lt;/properties&gt;
&lt;/project&gt;</pre>
<p style="text-align: justify;">Voici la source : <a href="http://www.adam-bien.com/roller/abien/entry/essential_maven_pom_for_javaee" target="_blank">http://www.adam-bien.com/roller/abien/entry/essential_maven_pom_for_javaee</a>.</p>
<p style="text-align: justify;">Pour compléter ce fichier il est possible d&#8217;ajouter un des nombreux boms proposés par le projet wildfly en version <code>8.0.0.Final</code> (<a href="https://github.com/wildfly/boms" target="_blank">https://github.com/wildfly/boms</a>) :</p>
<ul>
<li>jboss-javaee-7.0-with-all</li>
<li>jboss-javaee-7.0-with-hibernate</li>
<li>jboss-javaee-7.0-with-hibernate3</li>
<li>jboss-javaee-7.0-with-infinispan</li>
<li>jboss-javaee-7.0-with-logging</li>
<li>jboss-javaee-7.0-with-resteasy</li>
<li>jboss-javaee-7.0-with-security</li>
<li>jboss-javaee-7.0-with-tools</li>
<li>jboss-javaee-7.0-with-transactions</li>
</ul>
<p>Par exemple :</p>
<pre class="brush: xml; gutter: true; first-line: 1">&lt;dependencyManagement&gt;
    &lt;dependencies&gt;
        &lt;dependency&gt;
           &lt;groupId&gt;org.wildfly.bom&lt;/groupId&gt;
           &lt;artifactId&gt;jboss-javaee-7.0-with-all&lt;/artifactId&gt;
           &lt;version&gt;8.0.0.Final&lt;/version&gt;
           &lt;type&gt;pom&lt;/type&gt;
           &lt;scope&gt;import&lt;/scope&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
&lt;/dependencyManagement&gt;</pre>
<p style="text-align: justify;">Au final, je n&#8217;ai pas trouvé l&#8217;archetype que je souhaitais, mais je suis tout de même tombé sur une bonne astuce pour débuter un projet J2EE7 très rapidement.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2014/07/15/j2ee7-pom-minimal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven &#8211; Wildfly plugin</title>
		<link>http://everythingiswrong.free.fr/index.php/2014/03/08/maven-wildfly-plugin/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2014/03/08/maven-wildfly-plugin/#comments</comments>
		<pubDate>Sat, 08 Mar 2014 21:03:57 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[JBoss]]></category>

		<guid isPermaLink="false">http://everythingiswrong.free.fr/?p=2843</guid>
		<description><![CDATA[wildfly-maven-plugin]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">J&#8217;ai découvert qu&#8217;il existait un plugin maven pour le serveur d&#8217;application Wildfly qui se comporte exactement comme le plugin maven pour tomcat. Pour l&#8217;utiliser, il faut ajouter ces quelques lignes dans le fichier <code>pom.xml</code>.</p>
<pre class="brush: xml; gutter: true; first-line: 1">&lt;project&gt;
    ...
    &lt;build&gt;
        ...
        &lt;plugins&gt;
            ...
            &lt;plugin&gt;
                &lt;groupId&gt;org.wildfly.plugins&lt;/groupId&gt;
                &lt;artifactId&gt;wildfly-maven-plugin&lt;/artifactId&gt;
                &lt;version&gt;1.0.1.Final&lt;/version&gt;
            &lt;/plugin&gt;
            ...
        &lt;/plugins&gt;
        ...
    &lt;/build&gt;
...
&lt;/project&gt;</pre>
<p style="text-align: justify;">Le goal <code>wildfly:run</code> compile et package le projet, puis le déploie dans une instance du serveur. Deux possibilités, soit la variable d&#8217;environnement <code>wildfly.home</code> existe et le serveur installé à cet emplacement est utilisé, soit elle n&#8217;existe pas et le serveur wildfly est téléchargé puis déployé dans le répertoire <code>target</code> du projet.</p>
<p style="text-align: justify;">Le plugin permet beaucoup plus de choses que le simple démarrage de l&#8217;application dans un conteneur piloté par Maven. Pour plus d&#8217;information, son adresse est la suivante : <a href="https://docs.jboss.org/wildfly/plugins/maven/latest/" target="_blank">https://docs.jboss.org/wildfly/plugins/maven/latest/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2014/03/08/maven-wildfly-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JRebel m2e connector</title>
		<link>http://everythingiswrong.free.fr/index.php/2013/02/08/jrebel-m2e-connector/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2013/02/08/jrebel-m2e-connector/#comments</comments>
		<pubDate>Fri, 08 Feb 2013 22:48:02 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Astuces]]></category>
		<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JRebel]]></category>

		<guid isPermaLink="false">http://everythingiswrong.free.fr/?p=2091</guid>
		<description><![CDATA[Configurer JRebel eclipse et Maven]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Le connecteur m2e de JRebel ne s&#8217;installe plus à partir du marketplace eclipse. Pour l&#8217;installer il faut passer par la mise à jour manuelle. Dans les menus de l&#8217;IDE : <em>Help -&gt; Install New software&#8230;</em></p>
<p style="text-align: justify;">Le site d&#8217;update est : <em>http://update.zeroturnaround.com/update-site</em>. Le plugin à installer : <em>JRebel m2eclipse</em>.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://everythingiswrong.free.fr/wp-content/uploads/m2e-JRebel.jpg" alt="" width="600" height="588" /></p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2013/02/08/jrebel-m2e-connector/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse compiler &amp; m2e</title>
		<link>http://everythingiswrong.free.fr/index.php/2012/01/24/eclipse-compiler-m2e/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2012/01/24/eclipse-compiler-m2e/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 21:45:08 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://everythingiswrong.free.fr/?p=1745</guid>
		<description><![CDATA[Paramétrer m2e avec un compilateur alternatif (JDT au lieu de Javac par exemple)]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Récemment, j&#8217;ai appris que l&#8217;IDE eclipse n&#8217;utilisait pas le compilateur de la JDK (javac) pour transformer les fichiers Java en Class. C&#8217;est d&#8217;ailleurs pour cela qu&#8217;il est possible de développer et compiler du code sans avoir installer la JDK sur son ordinateur.</p>
<p style="text-align: justify;">Par défaut, Maven utilise javac pour compiler les sources Java. Or, dans certains cas, le compilateur eclipse (JDT) accepte de compiler des classes là où javac sort en erreur. Par exemple, voici un code qui compile avec le JDT et pas avec javac :</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: [8,9]">package com.test;

public class GenericMethod {

    private Object value;

    @SuppressWarnings("unchecked")
    public &lt;X&gt; X getValue() {
        return (X) value;
        // le cast n'est obligatoire que pour que javac compile
        // avec le compilateur eclipse, il n'est pas nécessaire
    }

    public void setValue(Object value) {
        this.value = value;
    }
}</pre>
<p style="text-align: justify;">Voici la classe pour appeler la méthode :</p>
<pre class="brush: java; gutter: true; first-line: 1; highlight: [11]">package com.test;

public class GenericMethodTest {

    public static void main(String[] args) {
        GenericMethod method = new GenericMethod();
        method.setValue(3);

        int[] array = new int[] {1, 2};

        array[0] = method.getValue();
        System.out.println(array[0]);
    }
}</pre>
<p style="text-align: justify;">Avec javac, la ligne 11 de la classe <em>GenericMethodTest</em> provoque l&#8217;erreur suivante :</p>
<pre>type parameters of &lt;X&gt;X cannot be determined;no unique maximal instance exists for type variable X with upper bounds int,java.lang.Object</pre>
<p style="text-align: justify;">Il peut donc être essentiel d&#8217;utiliser dans le processus de build un autre compilateur que javac. Il est possible de configurer le plugin <a href="http://maven.apache.org/plugins/maven-compiler-plugin/">maven-compiler-plugin</a> afin d&#8217;utiliser un compilateur alternatif. Par exemple, pour utiliser le compilateur eclipse c&#8217;est très simple :</p>
<pre class="brush: xml; gutter: true; first-line: 1; highlight: [11]">&lt;project&gt;
  [...]
  &lt;build&gt;
    [...]
    &lt;plugins&gt;
      [...]
      &lt;plugin&gt;
        &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
        &lt;version&gt;2.3.2&lt;/version&gt;
        &lt;configuration&gt;
          &lt;compilerId&gt;eclipse&lt;/compilerId&gt;
        &lt;/configuration&gt;
        &lt;dependencies&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;org.codehaus.plexus&lt;/groupId&gt;
            &lt;artifactId&gt;plexus-compiler-eclipse&lt;/artifactId&gt;
          &lt;/dependency&gt;
        &lt;/dependencies&gt;
      &lt;/plugin&gt;
  [...]
&lt;/project&gt;</pre>
<p style="text-align: justify;">Le build maven fonctionne parfaitement, en revanche l&#8217;utilisation du compilateur alternatif a des effets secondaires lorsqu&#8217;il est utilisé par le plugin eclipse m2e. La modification des fichiers .classpath et .project ne fonctionne plus correctement et cela provoque :</p>
<ul>
<li>La nature java du projet n&#8217;est pas détectée,</li>
<li>Les dépendances ne sont plus récupérées,</li>
<li>Les répertoires sources (src/main/java, src/main/resources, etc.) ne sont plus référencés</li>
</ul>
<p style="text-align: justify;">Le problème du nouveau plugin m2e c&#8217;est qu&#8217;il ne reconnaît les projets maven en tant que projets java que lorsque le compilateur utilisé est javac. Pour configurer un projet eclipse utilisant le compilateur eclipse, il est donc nécessaire d&#8217;indiquer à m2e qu&#8217;il s&#8217;agit bien d&#8217;un projet Java :</p>
<pre class="brush: xml; gutter: true; first-line: 1; highlight: [13,20,25]">&lt;pluginManagement&gt;
  &lt;plugins&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.eclipse.m2e&lt;/groupId&gt;
      &lt;artifactId&gt;lifecycle-mapping&lt;/artifactId&gt;
      &lt;version&gt;1.0.0&lt;/version&gt;
      &lt;configuration&gt;
        &lt;lifecycleMappingMetadata&gt;
          &lt;pluginExecutions&gt;
            &lt;pluginExecution&gt;
              &lt;pluginExecutionFilter&gt;
                &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
                &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
                &lt;versionRange&gt;[2.0,)&lt;/versionRange&gt;
                &lt;goals&gt;
                  &lt;goal&gt;compile&lt;/goal&gt;
                  &lt;goal&gt;testCompile&lt;/goal&gt;
                &lt;/goals&gt;
              &lt;parameters&gt;
                &lt;compilerId&gt;eclipse&lt;/compilerId&gt;
              &lt;/parameters&gt;
             &lt;/pluginExecutionFilter&gt;
             &lt;action&gt;
               &lt;configurator&gt;
                 &lt;id&gt;org.eclipse.m2e.jdt.javaConfigurator&lt;/id&gt;
               &lt;/configurator&gt;
             &lt;/action&gt;
           &lt;/pluginExecution&gt;
          &lt;/pluginExecutions&gt;
        &lt;/lifecycleMappingMetadata&gt;
      &lt;/configuration&gt;
    &lt;/plugin&gt;
  &lt;/plugins&gt;
&lt;/pluginManagement&gt;</pre>
<p style="text-align: justify;">Dès que m2e reconnaît le projet en tant que projet java, la fonction <em>Update project configuration</em>, configurera les répertoires sources et mettra à jour le classpath du projet.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2012/01/24/eclipse-compiler-m2e/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Appliation J2EE6 avec JBoss 7 et Maven</title>
		<link>http://everythingiswrong.free.fr/index.php/2011/08/03/appliation-j2ee6-avec-jboss-7-et-maven/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2011/08/03/appliation-j2ee6-avec-jboss-7-et-maven/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 18:57:10 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Tests]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=1535</guid>
		<description><![CDATA[Modèle d'applications J2EE6 avec JBoss 7 comportant : JSF2, JPA, EJB3, REST.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">JBoss propose un certain nombre d&#8217;archetypes dont un qui génère  une application J2EE6 pour JBoss 7 : org.jboss.spec.archetypes:jboss-javaee6-webapp. Or, par défaut, maven ne connait pas cet archetype. Voici comment réussir à l&#8217;utiliser dans Eclipse.</p>
<p style="text-align: justify;">Avant toute chose, il faut vérifier que maven est configuré pour aller chercher des librairies sur le repository JBoss : le fichier settings.xml (~/.m2/settings.xml ou $MAVEN_HOME/conf/settings.xml) doit contenir  le code XML suivant :</p>
<pre class="brush: xml; toolbar: true;">&lt;settings&gt;
 ...
  &lt;profiles&gt;
    ...
    &lt;profile&gt;
      &lt;id&gt;jboss-public-repository&lt;/id&gt;
      &lt;repositories&gt;
        &lt;repository&gt;
          &lt;id&gt;jboss-public-repository-group&lt;/id&gt;
          &lt;name&gt;JBoss Public Maven Repository Group&lt;/name&gt;
          &lt;url&gt;https://repository.jboss.org/nexus/content/groups/public-jboss/&lt;/url&gt;
          &lt;layout&gt;default&lt;/layout&gt;
          &lt;releases&gt;
            &lt;enabled&gt;true&lt;/enabled&gt;
            &lt;updatePolicy&gt;never&lt;/updatePolicy&gt;
          &lt;/releases&gt;
          &lt;snapshots&gt;
            &lt;enabled&gt;true&lt;/enabled&gt;
            &lt;updatePolicy&gt;never&lt;/updatePolicy&gt;
          &lt;/snapshots&gt;
        &lt;/repository&gt;
      &lt;/repositories&gt;
      &lt;pluginRepositories&gt;
        &lt;pluginRepository&gt;
          &lt;id&gt;jboss-public-repository-group&lt;/id&gt;
          &lt;name&gt;JBoss Public Maven Repository Group&lt;/name&gt;
          &lt;url&gt;https://repository.jboss.org/nexus/content/groups/public-jboss/&lt;/url&gt;
          &lt;layout&gt;default&lt;/layout&gt;
          &lt;releases&gt;
            &lt;enabled&gt;true&lt;/enabled&gt;
            &lt;updatePolicy&gt;never&lt;/updatePolicy&gt;
          &lt;/releases&gt;
          &lt;snapshots&gt;
            &lt;enabled&gt;true&lt;/enabled&gt;
            &lt;updatePolicy&gt;never&lt;/updatePolicy&gt;
          &lt;/snapshots&gt;
        &lt;/pluginRepository&gt;
      &lt;/pluginRepositories&gt;
    &lt;/profile&gt;

  &lt;/profiles&gt;

  &lt;activeProfiles&gt;
    &lt;activeProfile&gt;jboss-public-repository&lt;/activeProfile&gt;
  &lt;/activeProfiles&gt;
  ...
&lt;/settings&gt;
</pre>
<p style="text-align: justify;">Ensuite, pour créer le projet dans Eclipse, il faut commencer par installer le catalogue JBoss : <em>Windows -&gt; Preferences&#8230;</em> puis dans la fenêtre <em>Maven -&gt; Achetypes</em> cliquer sur le bouton  <em>Add Remote Catalog&#8230;</em> Saisir <a href="https://repository.jboss.org/nexus/content/groups/public/archetype-catalog.xml" target="_blank">https://repository.jboss.org/nexus/content/groups/public/archetype-catalog.xml</a> dans l&#8217;intitulé Catalogue File et JBoss dans Description. Après l&#8217;opération, il ne reste plus qu&#8217;à accéder au wizard de création d&#8217;un projet Maven (<em>File -&gt; New -&gt; Project&#8230;</em> puis <em>Maven project</em>) et de sélectionner l&#8217;archetype jboss-javaee6-webapp.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://yan.langlois.free.fr/wordpress/wp-content/uploads/jboss-javaee6-webapp.png" alt="" width="577" height="488" /></p>
<p style="text-align: justify;">Le squelette de l&#8217;application est celui-ci :</p>
<p class="wp-caption" style="text-align: justify;">/home/&#8230;/jboss-webapp-j2ee6<br />
|&#8211; pom.xml<br />
|&#8211; readme.html<br />
|&#8211; readme.md<br />
`&#8211; src<br />
|&#8211; main<br />
|   |&#8211; java<br />
|   |   `&#8211; test<br />
|   |       `&#8211; jboss_webapp_j2ee6<br />
|   |           |&#8211; controller<br />
|   |           |   `&#8211; MemberRegistration.java<br />
|   |           |&#8211; data<br />
|   |           |   `&#8211; MemberListProducer.java<br />
|   |           |&#8211; model<br />
|   |           |   `&#8211; Member.java<br />
|   |           |&#8211; rest<br />
|   |           |   |&#8211; JaxRsActivator.java<br />
|   |           |   `&#8211; MemberResourceRESTService.java<br />
|   |           `&#8211; util<br />
|   |               `&#8211; Resources.java<br />
|   |&#8211; resources<br />
|   |   |&#8211; import.sql<br />
|   |   `&#8211; META-INF<br />
|   |       `&#8211; persistence.xml<br />
|   `&#8211; webapp<br />
|       |&#8211; index.html<br />
|       |&#8211; index.xhtml<br />
|       |&#8211; resources<br />
|       |   |&#8211; css<br />
|       |   |   `&#8211; screen.css<br />
|       |   `&#8211; gfx<br />
|       |       |&#8211; banner.png<br />
|       |       `&#8211; logo.png<br />
|       `&#8211; WEB-INF<br />
|           |&#8211; beans.xml<br />
|           |&#8211; faces-config.xml<br />
|           `&#8211; templates<br />
|               `&#8211; default.xhtml<br />
`&#8211; test<br />
|&#8211; java<br />
|   `&#8211; test<br />
|       `&#8211; jboss_webapp_j2ee6<br />
|           `&#8211; test<br />
|               `&#8211; MemberRegistrationTest.java<br />
`&#8211; resources<br />
`&#8211; arquillian.xml</p>
<p style="text-align: justify;">Ce qui équivaut à une application de départ avec un exemple JSF2 s&#8217;appuyant sur une base de données  embarquée avec quelques classes constituant un modèle MVC, un exemple de service web REST, et un exemple de test unitaire avec Arquillian. A noter aussi, l&#8217;utilisation d&#8217;un EJB3 archivé dans un WAR et non un EAR comme il aurait fallu le faire avec J2EE5.</p>
<p style="text-align: justify;">Pour déployer l&#8217;application il faut la packager et utiliser le plugin JBoss de déploiement déjà configuré par l&#8217;archetype (<em>maven package jboss-as:deploy</em>). Attention, pour que tout se déroule correctement, il faudra avoir démarré votre serveur <a href="http://www.jboss.org/jbossas" target="_blank">JBoss7</a> au préalable.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2011/08/03/appliation-j2ee6-avec-jboss-7-et-maven/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>C et C++ avec Maven : maven-nar-plugin</title>
		<link>http://everythingiswrong.free.fr/index.php/2011/07/14/c-et-c-avec-maven-maven-nar-plugin/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2011/07/14/c-et-c-avec-maven-maven-nar-plugin/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 20:48:17 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Maven]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=1455</guid>
		<description><![CDATA[Utiliser Maven pour produire un livrable C ou C++.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">J&#8217;ai eu l&#8217;occasion de travailler sur plusieurs outils de build très différents comme MakeFile, Ant ou Maven. Chacun possède ses spécificités, ses avantages et ses inconvénients. Mais en règle générale, j&#8217;ai l&#8217;impression que les gens associent souvent un outil avec une technologie particulière : MakeFile pour C/C++, Ant ou Maven pour le Java. En réalité il est possible d&#8217;utiliser ces outils de build indépendamment des technologies utilisées.</p>
<p style="text-align: justify;">Je pense que Maven est l&#8217;outil le plus abouti sur lequel j&#8217;ai travaillé jusqu&#8217;à présent. Il y a peu de temps, je découvrais qu&#8217;il était possible de l&#8217;utiliser avec des projets Flex grâce à l&#8217;extension <a href="http://flexmojos.sonatype.org/index.html" target="_blank">FlexMojo</a>. Cela m&#8217;a redonner envie de trouver une solution simple pour utiliser Maven dans un projet C/C++.</p>
<p style="text-align: justify;">Jusqu&#8217;à aujourd&#8217;hui je ne connaissais que le plugin <a href="http://mojo.codehaus.org/maven-native/native-maven-plugin/index.html" target="_blank">Native</a> mais je l&#8217;ai toujours trouvé trop compliqué et au final, je n&#8217;ai jamais réussi à l&#8217;utiliser. C&#8217;est dans ce contexte d&#8217;échec que je viens de découvrir une extension C/C++ (et Fortran) qui fonctionne sans effort ou presque : <a href="http://duns.github.com/maven-nar-plugin/index.html" target="_blank">maven-nar-plugin</a>. Lorsque j&#8217;écris &#8220;presque&#8221; sans effort c&#8217;est tout simplement parce que les plugins nécessaires ne sont pas encore disponible sur le repository central.</p>
<p style="text-align: justify;">Voici la structure standard des répertoires de cette extension :</p>
<pre class="wp-caption" style="text-align: left;">/yourproject
    /src
        /main
            /java
            /resources
            /include
            /c++
            /c
            /fortran
        /test
            /java
            /resources
            /include
            /c++
            /c
            /fortran
</pre>
<p style="text-align: justify;">Pour installer maven-nar-plugin dans le répository local, il est nécessaire d&#8217;installer au préalable la librairie net.sf.antcontrib:cpptasks-parallel qui se trouve sur le repository GIT <a href="http://github.com/duns/cpptasks-parallel" target="_parent">http://github.com/duns/cpptasks-parallel</a>.</p>
<pre class="wp-caption" style="text-align: left;">git clone http://github.com/duns/cpptasks-parallel cpptasks-parallel</pre>
<p style="text-align: justify;">Puis</p>
<pre class="wp-caption" style="text-align: left;">cd cpptasks-parallel
mvn clean install</pre>
<p style="text-align: justify;">Il faut procéder de la même façon pour installer le plugin nar qui se trouve sur le repository GIT https://github.com/duns/maven-nar-plugin.git et l&#8217;archetype maven-archetype-nar-exec sur le repository https://github.com/duns/maven-archetype-nar-exec.git. Cet archetype va permettre de créer un projet exemple pour débuter rapidement grâce à la commande suivante :</p>
<pre class="wp-caption" style="text-align: left;">mvn archetype:generate -DarchetypeArtifactId=maven-archetype-nar-exec
        -DarchetypeVersion=1.0-SNAPSHOT
        -DgroupId=com.mycompany.app
        -DartifactId=my-cpp-app</pre>
<p style="text-align: justify;">Après l&#8217;exécution du build Maven sur ce nouveau projet (mvn install par exemple), l&#8217;exécutable se retrouve dans le répertoire target/nar/my-cpp-app-1.0-SNAPSHOT-*-executable/bin/*/my-cpp-app.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2011/07/14/c-et-c-avec-maven-maven-nar-plugin/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>tomcat-maven-plugin : debug</title>
		<link>http://everythingiswrong.free.fr/index.php/2011/04/29/tomcat-maven-plugin-debug/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2011/04/29/tomcat-maven-plugin-debug/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 20:00:24 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Astuces]]></category>
		<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=1294</guid>
		<description><![CDATA[Comment débugger une application web avec le plugin tomcat-maven-plugin ?]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Le <a href="http://mojo.codehaus.org/tomcat-maven-plugin" target="_blank">plugin tomcat</a> de Maven est très pratique lors du développement d&#8217;une application web. Voici comment le configurer :</p>
<pre class="brush: xml; toolbar: true;"> &lt;!-- Embedded Tomcat (package tomcat:run) --&gt;
 &lt;!-- Standalone Tomcat (package tomcat:deploy) --&gt;
 &lt;plugin&gt;
   &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
   &lt;artifactId&gt;tomcat-maven-plugin&lt;/artifactId&gt;
   &lt;configuration&gt;
     &lt;path&gt;/${project.build.finalName}&lt;/path&gt;
     &lt;!-- Embedded port --&gt;
     &lt;port&gt;9090&lt;/port&gt;
   &lt;/configuration&gt;
 &lt;/plugin&gt;
</pre>
<p style="text-align: justify;">Le plugin démarre le serveur dans la sa propre JVM. Pour pouvoir débuger votre application, il faut donc uniquement démarrer Maven avec l&#8217;option de debug comme cela :</p>
<p><code class="wp-caption">mvn tomcat:run -DXdebug -DXnoagent -Djava.compiler=NONE -DXrunjdwp:transport=dt_socket,address=3998,suspend=n,server=y</code></p>
<p style="text-align: justify;">Ou bien, si vous utilisez eclipse avec le plugin <a href="http://m2eclipse.sonatype.org/" target="_blank">m2eclipse</a> : cliquer avec le bouton droit de votre souris sur le projet : <em>Debug As -&gt; Maven build &#8230;</em> .</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2011/04/29/tomcat-maven-plugin-debug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven et SeamTest</title>
		<link>http://everythingiswrong.free.fr/index.php/2011/03/22/maven-et-seamtest/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2011/03/22/maven-et-seamtest/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 22:10:46 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Conteneurs embarqués]]></category>
		<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Tests unitaires]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Seam]]></category>
		<category><![CDATA[Tests]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=1098</guid>
		<description><![CDATA[Comment intégrer des tests d'intégration avec SeamTest ou DBUnitSeamTest dans un projet Maven.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">L&#8217;intégration des tests unitaires SeamTest dans un projet <a href="http://maven.apache.org/" target="_blank">Maven</a> est assez compliquée. Voici un exemple concret :</p>
<h1 style="text-align: justify;">Présentation du projet</h1>
<p style="text-align: justify;">Avant de rentrer dans des détails techniques, je préfère vous parler de l&#8217;application qui va me servir de base pour intégrer mon test SeamTest.</p>
<h2>Vision fonctionnelle</h2>
<p style="text-align: justify;">J&#8217;ai choisi de me baser sur l&#8217;exemple &#8220;hello world&#8221; du livre <em>Seam Framework:  Experience the Evolution of Java EE 2nd edition</em>. Vous pouvez retrouver les sources des exemples du livre à l&#8217;adresse suivante : <a href="http://solutionsfit.com/blog/books/" target="_blank">http://solutionsfit.com/blog/books/</a>. Malheureusement, l&#8217;auteur utilise <a href="http://ant.apache.org/" target="_blank">Ant</a> et non Maven pour gérer la compilation de ses projets.</p>
<p style="text-align: justify;">J&#8217;ai rajouté l&#8217;utilisation d&#8217;un service EJB Stateless pour démontrer la possibilité d&#8217;utiliser SeamTest dans un contexte technique hétérogène. Voici le diagramme des cas d&#8217;utilisation de l&#8217;application :</p>
<p style="text-align: center;"><img class="aligncenter" title="Cas d'utilisation de l'application" src="http://yuml.me/diagram/scruffy/usecase/[Utilisateur]-(Enregistrer une personne), [Utilisateur]-(Visualiser les personnes enregistrées)" alt="Cas d'utilisation de l'application" /></p>
<h2>Vision maven</h2>
<p>Le projet est composé d&#8217;un module père ayant trois modules fils :</p>
<p class="wp-caption" style="text-align: justify;">seamtest-parent<br />
|&#8211; seamtest-ear<br />
|&#8211; seamtest-ejb<br />
`&#8211; seamtest-webapp</p>
<p style="text-align: justify;">Vous pouvez checkouter les sources à l&#8217;adresse suivante : <a href="https://subversion.assembla.com/svn/everythingiswrong/seamtest-parent/" target="_blank">https://subversion.assembla.com/svn/everythingiswrong/seamtest-parent/</a>.</p>
<p style="text-align: justify;">Dans le reste de l&#8217;article, je vais me focaliser sur le module seamtest-ejb car c&#8217;est lui qui contient le composant Seam, la persistance et l&#8217;EJB Stateless à tester.</p>
<h2 style="text-align: justify;">Composant Seam à tester</h2>
<p>Nous allons tester le composant qui va :</p>
<ul>
<li>Enregistrer une nouvelle personne dans la base de données</li>
<li>Rechercher toutes les personnes de la base de données</li>
</ul>
<pre class="brush: java; toolbar: true;">@Stateful
@Name("manager")
public class ManagerAction extends Manager {
  @In
  private Person person;

  @Out
  private List&lt;Person&gt; fans;

  @EJB
  private CalculService calculService;

  @PersistenceContext
  private EntityManager em;

  //Méthode à tester.
  public void sayHello () {
    em.persist (person);
    fans = em.createQuery("select p from Person p").getResultList();
  }

  // Méthode pour vérifier l'injection de l'EJB Stateless dans le composant Seam
  public int additionner(int a, int b) {
    return (int) calculService.addition(a, b);
  }

  @Remove
  @Destroy
  public void destroy() {
  }
}</pre>
<h1 style="text-align: justify;">Installation et configuration</h1>
<p style="text-align: justify;">Pour information, SeamTest utilise le serveur <a href="http://community.jboss.org/wiki/EmbeddedJBoss" target="_blank">JBoss embedded</a>.</p>
<h2 style="text-align: justify;">Installation de JBoss Embedded</h2>
<p style="text-align: justify;">Cette installation se résume à la copie du répertoire booststrap qui est dans la distribution de Seam (par exemple <a href="http://anonsvn.jboss.org/repos/seam/branches/community/Seam_2_2/bootstrap/" target="_blank">ici</a>) dans le répertoire src/test.</p>
<h2 style="text-align: justify;">Le fichier &#8220;pom.xml&#8221;</h2>
<p style="text-align: justify;">Ce fichier doit contenir l&#8217;ensemble des librairies qui vont permettre de démarrer et d&#8217;exécuter le serveur JBoss embedded. Il doit aussi prendre en compte le répertoire de <em>bootstrap</em> ajouté précédemment dans les ressources des tests.</p>
<pre class="brush: xml; toolbar: true;">&lt;dependencies&gt;
  ...
  &lt;!-- dépendances des tests unitaites : http://community.jboss.org/thread/18299 --&gt;
  &lt;!-- dependencies related to JBoss Embedded for Seam 2.X.X --&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;org.jboss.seam.embedded&lt;/groupId&gt;
    &lt;artifactId&gt;jboss-embedded-all&lt;/artifactId&gt;
    &lt;version&gt;beta3.SP12&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
    &lt;exclusions&gt;
      &lt;exclusion&gt;
        &lt;groupId&gt;org.jboss.microcontainer&lt;/groupId&gt;
        &lt;artifactId&gt;jboss-deployers-client-spi&lt;/artifactId&gt;
      &lt;/exclusion&gt;
      &lt;exclusion&gt;
        &lt;groupId&gt;org.jboss.microcontainer&lt;/groupId&gt;
        &lt;artifactId&gt;jboss-deployers-core-spi&lt;/artifactId&gt;
      &lt;/exclusion&gt;
    &lt;/exclusions&gt;
  &lt;/dependency&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;org.jboss.seam.embedded&lt;/groupId&gt;
    &lt;artifactId&gt;hibernate-all&lt;/artifactId&gt;
    &lt;version&gt;beta3.SP12&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
  &lt;/dependency&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;org.jboss.seam.embedded&lt;/groupId&gt;
    &lt;artifactId&gt;thirdparty-all&lt;/artifactId&gt;
    &lt;version&gt;beta3.SP12&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
  &lt;/dependency&gt;

  &lt;!-- dependencies related to JBoss MicroContainer --&gt;
  &lt;!-- java.lang.NoClassDefFoundError: javax/faces/application/Application --&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;javax.faces&lt;/groupId&gt;
    &lt;artifactId&gt;jsf-api&lt;/artifactId&gt;
    &lt;version&gt;1.2_09&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
  &lt;/dependency&gt;

  &lt;!-- java.lang.NoClassDefFoundError: org/jboss/el/ExpressionFactoryImpl --&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;org.jboss.el&lt;/groupId&gt;
    &lt;artifactId&gt;jboss-el&lt;/artifactId&gt;
    &lt;version&gt;1.0_02.CR4&lt;/version&gt;    &lt;!-- http://seamframework.org/Community/IllegalAccessErrorAfterUpgradingTo212CR1 --&gt;
    &lt;scope&gt;test&lt;/scope&gt;
  &lt;/dependency&gt;

  &lt;!-- dependencies related to TestNG --&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;org.testng&lt;/groupId&gt;
    &lt;artifactId&gt;testng&lt;/artifactId&gt;
    &lt;version&gt;5.8&lt;/version&gt;
    &lt;classifier&gt;jdk15&lt;/classifier&gt;
    &lt;scope&gt;test&lt;/scope&gt;
  &lt;/dependency&gt;
&lt;/dependencies&gt;
&lt;build&gt;
  &lt;testResources&gt;
    &lt;testResource&gt;
      &lt;directory&gt;src/test/resources&lt;/directory&gt;
      &lt;filtering&gt;true&lt;/filtering&gt;
    &lt;/testResource&gt;
    &lt;testResource&gt;
      &lt;directory&gt;src/test/bootstrap&lt;/directory&gt;
      &lt;filtering&gt;false&lt;/filtering&gt;
    &lt;/testResource&gt;
    &lt;testResource&gt;
      &lt;directory&gt;src/test/bootstrap&lt;/directory&gt;
      &lt;filtering&gt;true&lt;/filtering&gt;
      &lt;includes&gt;
        &lt;include&gt;**/*.xml&lt;/include&gt;
      &lt;/includes&gt;
    &lt;/testResource&gt;
  &lt;/testResources&gt;
  ...
&lt;/build&gt;</pre>
<p style="text-align: justify;"><span style="text-decoration: underline;">Remarque</span> : à l&#8217;heure actuelle la version la plus récente du conteneur est la beta3.SP12.</p>
<h2 style="text-align: justify;">Fichiers de tests</h2>
<p style="text-align: justify;">Dans la pratique, on ajoute toujours un fichier seam.properties vide dans le classpath des jar contenant des composants Seam. Dans le cas du test, ce fichier doit contenenir au minimum l&#8217;information sur le nom JNDI des EJB :</p>
<p class="wp-caption" style="text-align: justify;">org.jboss.seam.core.init.jndiPattern = #{ejbName}/local</p>
<p style="text-align: justify;">La classe de test doit étendre SeamTest. Elle peut ensuite utiliser l&#8217;EL pour référencer les composants Seam :</p>
<pre class="brush: java; toolbar: true;">public class ManagerActionTest extends SeamTest {
  private static Logger LOGGER = Logger.getLogger(ManagerActionTest.class);

  @Test
  public void testSayHello() {
    try {
      new ComponentTest() {
        @Override
        protected void testComponents() throws Exception {
          setValue("#{person.name}", "Yan");
          invokeMethod("#{manager.sayHello}");
          List&lt;Person&gt; fans = (List&lt;Person&gt;) getValue("#{fans}");
          assertNotNull(fans);
          assertEquals(1, fans.size());
          assertEquals("Yan", fans.get(0).getName());
          // Test le service EJB
          assertEquals(3, invokeMethod("#{manager.additionner(1, 2)}"));
        }
      }.run();
    } catch (Exception e) {
      LOGGER.error("TEST KO : " + e.getMessage());
      fail("TEST KO : " + e.getMessage());
    }
  }
}</pre>
<p style="text-align: justify;">En utilisant Hibernate, vous pouvez exécuter des scripts SQL au déploiement de votre test en ajoutant un fichier <em>import.sql</em> dans le classpath de test (src/test/resources). Cela dit,  dans ce cas, je conseillerai plutôt d&#8217;utiliser l&#8217;intégration avec DBUnit.</p>
<h2 style="text-align: justify;">Exécution</h2>
<p style="text-align: justify;">Pour exécuter les tests il faut lancer la commande <em>mvn clean test</em>.</p>
<h1 style="text-align: justify;">Variantes</h1>
<h2 style="text-align: justify;">Intégration avec DBUnit</h2>
<p style="text-align: justify;">L&#8217;intégration est possible entre seamTest et DBUnit. La classe de test doit étendre <em>DBunitSeamTest</em> et implémenter la méthode <em>prepareDBUnitOperations()</em>. Il faut aussi donner à TestNg la nom JNDI de la source de données vers la base de données ainsi que le type de la base de données (HSQL ou MYSQL). Pour cela, il faut configurer le plugin surefire comme cela :</p>
<pre class="brush: xml; toolbar: true;">&lt;build&gt;
  ...
  &lt;plugin&gt;
    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
    &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
    &lt;version&gt;2.4.3&lt;/version&gt;
    &lt;configuration&gt;
      &lt;systemProperties&gt;
        &lt;property&gt;
          &lt;name&gt;datasourceJndiName&lt;/name&gt;
          &lt;value&gt;java:/DefaultDS&lt;/value&gt;
        &lt;/property&gt;
        &lt;property&gt;
          &lt;name&gt;database&lt;/name&gt;
          &lt;value&gt;HSQL&lt;/value&gt;
        &lt;/property&gt;
      &lt;/systemProperties&gt;
      &lt;argLine&gt;-Dsun.lang.ClassLoader.allowArraySyntax=true&lt;/argLine&gt;
    &lt;/configuration&gt;
 ...
&lt;/build&gt;</pre>
<p style="text-align: justify;"><span style="text-decoration: underline;">Remarque</span> : deux propriétés pour déclarer le type de la source de données et son nom JNDI ainsi qu&#8217;un argument pour permettre au serveur JBoss Embedded de s&#8217;éxécuter avec une JDK 1.6 (par défaut ce serveur n&#8217;est compatible qu&#8217;avec une JDK1.5).</p>
<p style="text-align: justify;">Pour information, DBUnit propose deux implémentations différentes pour décrire les données d&#8217;une base : le <a href="http://dbunit.sourceforge.net/apidocs/org/dbunit/dataset/xml/FlatXmlDataSet.html">FlatXmlDataSet</a> et le <a href="http://dbunit.sourceforge.net/apidocs/org/dbunit/dataset/xml/XmlDataSet.html">XmlDataSet</a> (<a href="http://dbunit.sourceforge.net/components.html" target="_blank">http://dbunit.sourceforge.net/components.html</a>).  SeamTest ne support que le FlatXmlDataSet.</p>
<h2 style="text-align: justify;">Dépendances sur des projets ou modules de type EJB</h2>
<p style="text-align: justify;">Dans le cas où votre module dépende d&#8217;un autre module EJB, il faut arriver à déployer la dépendance de type EJB dans le conteneur JBoss embedded. Il est possible de faire cette opération avec le plugin maven <a href="http://maven.apache.org/plugins/maven-dependency-plugin/" target="_blank">maven-dependency-plugin</a> comme cela :</p>
<pre class="brush: xml; toolbar: true;">&lt;build&gt;
  ...
  &lt;plugin&gt;
    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
    &lt;artifactId&gt;maven-dependency-plugin&lt;/artifactId&gt;
    &lt;executions&gt;
      &lt;execution&gt;
        &lt;id&gt;copy&lt;/id&gt;
        &lt;phase&gt;process-test-resources&lt;/phase&gt;
        &lt;goals&gt;
          &lt;goal&gt;copy&lt;/goal&gt;
        &lt;/goals&gt;
        &lt;configuration&gt;
          &lt;artifactItems&gt;
            &lt;artifactItem&gt;
              &lt;groupId&gt;...&lt;/groupId&gt;
              &lt;artifactId&gt;...&lt;/artifactId&gt;
              &lt;version&gt;...&lt;/version&gt;
              &lt;type&gt;...&lt;/type&gt;
              &lt;classifier&gt;...&lt;/classifier&gt;
              &lt;overWrite&gt;false&lt;/overWrite&gt;
              &lt;outputDirectory&gt;${project.build.directory}/test-classes/deploy&lt;/outputDirectory&gt;
            &lt;/artifactItem&gt;
          &lt;/artifactItems&gt;
        &lt;/configuration&gt;
      &lt;/execution&gt;
    &lt;/executions&gt;
  &lt;/plugin&gt;
  ...
&lt;/build&gt;</pre>
<p><span style="text-decoration: underline;">Remarque</span> : la copie de la dépendance se déroule avant la phase d&#8217;exécution des tests.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2011/03/22/maven-et-seamtest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jaxb2-maven-plugin : plusieurs exécutions successives de jaxb2:xjc</title>
		<link>http://everythingiswrong.free.fr/index.php/2011/02/11/jaxb2-maven-plugin-plusieurs-executions-successives-de-jaxb2xjc/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2011/02/11/jaxb2-maven-plugin-plusieurs-executions-successives-de-jaxb2xjc/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 21:13:58 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Astuces]]></category>
		<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=893</guid>
		<description><![CDATA[Configuration particulière du plugin jaxb2-maven-plugin]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Dans ce ticket, je vais expliquer comment bien configurer le plugin <a href="http://mojo.codehaus.org/jaxb2-maven-plugin/">jaxb2-maven-plugin</a> dans le cas où l&#8217;on souhaite transformer des fichiers XSD en classes java vers des packages différents. Il faut savoir qu&#8217;avec ce plugin il n&#8217;est pas possible de définir plusieurs packages de destination dans une même exécution.</p>
<p style="text-align: justify;">Dans l&#8217;exemple choisi, je génère deux classes Java à partir de deux fichier XSD vers deux packages différents :</p>
<p style="text-align: justify;">
<pre class="brush: xml; toolbar: true;">&lt;plugin&gt;
  &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
  &lt;artifactId&gt;jaxb2-maven-plugin&lt;/artifactId&gt;
  &lt;executions&gt;
    &lt;execution&gt;
      &lt;id&gt;id1&lt;/id&gt;
      &lt;phase&gt;generate-sources&lt;/phase&gt;
      &lt;goals&gt;
        &lt;goal&gt;xjc&lt;/goal&gt;
      &lt;/goals&gt;
      &lt;configuration&gt;
        &lt;clearOutputDir&gt;false&lt;/clearOutputDir&gt;
        &lt;staleFile&gt;${project.build.directory}/generated-sources/jaxb/.staleFlag-id1&lt;/staleFile&gt;
        &lt;schemaDirectory&gt;${basedir}/src/main/resources/id1&lt;/schemaDirectory&gt;
        &lt;packageName&gt;id1&lt;/packageName&gt; &lt;!-- The name of your generated source package --&gt;
      &lt;/configuration&gt;
    &lt;/execution&gt;
    &lt;execution&gt;
      &lt;id&gt;id2&lt;/id&gt;
      &lt;phase&gt;generate-sources&lt;/phase&gt;
      &lt;goals&gt;
        &lt;goal&gt;xjc&lt;/goal&gt;
      &lt;/goals&gt;
      &lt;configuration&gt;
        &lt;clearOutputDir&gt;false&lt;/clearOutputDir&gt;
        &lt;staleFile&gt;${project.build.directory}/generated-sources/jaxb/.staleFlag-id2&lt;/staleFile&gt;
        &lt;schemaDirectory&gt;${basedir}/src/main/resources/id2&lt;/schemaDirectory&gt;
        &lt;packageName&gt;id2&lt;/packageName&gt; &lt;!-- The name of your generated source package --&gt;
      &lt;/configuration&gt;
    &lt;/execution&gt;
  &lt;/executions&gt;
  &lt;dependencies&gt;
     &lt;dependency&gt;
       &lt;groupId&gt;xerces&lt;/groupId&gt;
       &lt;artifactId&gt;xercesImpl&lt;/artifactId&gt;
       &lt;version&gt;2.8.1&lt;/version&gt;
     &lt;/dependency&gt;
  &lt;/dependencies&gt;
&lt;/plugin&gt;</pre>
<p style="text-align: justify;">A noter que pour chaque exécution :</p>
<ul>
<li style="text-align: justify;">Il est nécessaire d&#8217;utiliser un identifiant unique. Sinon maven n&#8217;arrivera pas à exécuter le plugin.</li>
<li style="text-align: justify;">Il faut impérativement utiliser l&#8217;option staleFile pour associer un fichier différent à chaque exécution (ce fichier sert au plugin pour savoir si les classes Java sont déjà générées). Sans cela, la seconde exécution ne génèrera pas de classe Java.</li>
<li style="text-align: justify;">Il faut indiquer au plugin de ne pas nettoyer le répertoire de génération avant l&#8217;exécution (option clearOutputDir à false) car c&#8217;est son comportement par défaut. Sans cela, la seconde exécution supprimera les classes générées pas la première.</li>
</ul>
<p style="text-align: justify;">Voici l&#8217;adresse de l&#8217;exemple associé : <a href="https://subversion.assembla.com/svn/everythingiswrong/tutorial-jaxb2-maven-plugin/" target="_blank">https://subversion.assembla.com/svn/everythingiswrong/tutorial-jaxb2-maven-plugin/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2011/02/11/jaxb2-maven-plugin-plusieurs-executions-successives-de-jaxb2xjc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jaxws-maven-plugin : générer des services SOAP à partir de plusieurs WSDL</title>
		<link>http://everythingiswrong.free.fr/index.php/2011/01/03/jaxws-maven-plugin-generer-des-services-soap-a-partir-de-plusieurs-wsdl/</link>
		<comments>http://everythingiswrong.free.fr/index.php/2011/01/03/jaxws-maven-plugin-generer-des-services-soap-a-partir-de-plusieurs-wsdl/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 21:09:28 +0000</pubDate>
		<dc:creator>Yan</dc:creator>
				<category><![CDATA[Astuces]]></category>
		<category><![CDATA[Java J2EE]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://yan.langlois.free.fr/wordpress/?p=756</guid>
		<description><![CDATA[Générer des services SAOP à partir de plusieurs WSDL dans un même package résultat grace à METRO.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Dans ce poste je vais générer des services SOAP java à partir de deux fichiers WSDL. La contrainte que je m&#8217;impose est de générer dans un même package toutes les classes java. Il faut paramétrer le plugin <a href="http://jax-ws-commons.java.net/jaxws-maven-plugin/" target="_blank">jaxws-maven-plugin</a> en lui donnant un nom de package pour l&#8217;ensemble des WSDL (ou bien utiliser le même namespace pour les deux WSDL et leurs objets associés) :</p>
<p style="text-align: justify;">
<pre class="brush: xml; title: ; notranslate">
&lt;plugin&gt;
   &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
   &lt;artifactId&gt;jaxws-maven-plugin&lt;/artifactId&gt;
   &lt;executions&gt;
      &lt;execution&gt;
         &lt;goals&gt;
            &lt;goal&gt;wsimport&lt;/goal&gt;
         &lt;/goals&gt;
      &lt;/execution&gt;
   &lt;/executions&gt;
   &lt;configuration&gt;
      &lt;packageName&gt;com.example.myschema&lt;/packageName&gt;
   &lt;/configuration&gt;
...
&lt;/plugin&gt;
</pre>
<p style="text-align: justify;">Le problème c&#8217;est que le plugin génère les objets dans l&#8217;ordre de traitement des WSDL. Cela implique que la classe ObjectFactory.java qui permet d&#8217;instancier les objets issus de la génération est créée une première fois pour les objets du premier WSDL puis écrasée par la seconde génération avec les objets du second WSDL.</p>
<p style="text-align: justify;">Pour résoudre ce problème, il est possible de mutualiser les objets des deux WSDL dans un même schéma XSD qui va englober tous les objets des deux WSDL. La première génération va toujours être écrasée par la seconde mais cette fois si, les deux générations produisent exactement les mêmes objets et l&#8217;objet ObjectFactory va pouvoir instancier tous les objets des deux WSDL.</p>
<p style="text-align: justify;">Voici un exemple : <a href="https://subversion.assembla.com/svn/everythingiswrong/multiple-wsdl-same-package/" target="_blank">https://subversion.assembla.com/svn/everythingiswrong/multiple-wsdl-same-package/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://everythingiswrong.free.fr/index.php/2011/01/03/jaxws-maven-plugin-generer-des-services-soap-a-partir-de-plusieurs-wsdl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
