<?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>La Fabrick &#187; maven</title>
	<atom:link href="http://www.lafabrick.com/blog/tag/maven/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lafabrick.com/blog</link>
	<description>Laboratoire d&#039;interfaces riches (Flex, Flash, Air ...)</description>
	<lastBuildDate>Mon, 28 Nov 2011 22:02:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>AIR 2 : appeler un JAR exécutable via un NativeProcess</title>
		<link>http://www.lafabrick.com/blog/2010/08/20/2167-air-2-appeler-un-jar-executable-via-un-nativeprocess/</link>
		<comments>http://www.lafabrick.com/blog/2010/08/20/2167-air-2-appeler-un-jar-executable-via-un-nativeprocess/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 00:21:08 +0000</pubDate>
		<dc:creator>Hervé</dc:creator>
				<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[JAR]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[NativeProcess]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=2167</guid>
		<description><![CDATA[Vous avez certainement pu remarquer l&#8217;apparition attendue de la fonctionnalité d&#8217;exécution de code natif parmi les nouveautés de AIR 2.0. Les NativeProcess permettent d&#8217;étendre significativement les possibilités offertes par une application AIR. Mais, l&#8217;un des gros atouts d&#8217;Adobe AIR résidant dans sa nature multi-plateforme, il serait dommage de restreindre l&#8217;installation de votre application à un [...]]]></description>
			<content:encoded><![CDATA[<p>Vous avez certainement pu remarquer l&#8217;apparition attendue de la fonctionnalité d&#8217;exécution de code natif parmi les nouveautés de AIR 2.0. Les NativeProcess permettent d&#8217;étendre significativement les possibilités offertes par une application AIR.<br />
Mais, l&#8217;un des gros atouts d&#8217;Adobe AIR résidant dans sa nature multi-plateforme, il serait dommage de restreindre l&#8217;installation de votre application à un seul système d&#8217;exploitation&#8230; ça tombe bien, Java aussi est multi-plateforme (c&#8217;est bien l&#8217;open source) : OK du coup comment j&#8217;appelle du Java depuis mon AIR ?<br />
Explications&#8230;<br />
<span id="more-2167"></span></p>
<h2>Fonctionnement et limites d&#8217;un NativeProcess</h2>
<h3>Packaging de l&#8217;application</h3>
<p>Pour diverses raisons de sécurité, une application AIR utilisant un NativeProcess doit être packagée dans le format de la plateforme cible (exe pour Windows, dmg pour Mac, rpm / deb / &#8230; pour Linux). Fini donc dans ce cas le pratique fichier .air qui marche partout !<br />
Vous devez également indiquer dans le descripteur de l&#8217;application qu&#8217;il s&#8217;agit d&#8217;une application au profil &laquo;&nbsp;extendedDesktop&nbsp;&raquo; lui conférant donc les capacités d&#8217;exécuter un NativeProcess.<br />
Vous devez ouvrir le fichier <strong>monAppli-app.xml</strong> et modifier la balise <code>&lt;supportedProfiles&gt;</code></p>
<pre class="brush: xml">
&lt;supportedProfiles&gt;extendedDesktop&lt;/supportedProfiles&gt;
</pre>
<p>A partir de là, si vous tentez d&#8217;exporter un fichier .air, vous aurez un joli message d&#8217;erreur vous invitant à changer de profil.</p>
<h3>Considérations de sécurité</h3>
<p>Si AIR sans native process dispose de limitations de sécurité, dès lors que vous utilisez un native process, vous ouvrez la porte&#8230; Il est donc bon d&#8217;anticiper et de faire un maximum de vérifications sur vos appels pour éviter un remplacement d&#8217;un exécutable par un autre, moins sympathique, par exemple&#8230;</p>
<h2>Prêt ? On code</h2>
<h3>Paramétrage</h3>
<p>Un native process a besoin d&#8217;un contexte d&#8217;exécution. Ce contexte est défini à l&#8217;aide de l&#8217;objet <code>NativeProcessStartupInfo</code> décrivant notamment les éléments suivants :</p>
<ul>
<li><strong>workingDirectory</strong> : le répertoire d&#8217;exécution</li>
<li><strong>executableFile</strong> : l&#8217;exécutable à lancer</li>
<li><strong>arguments</strong> : la liste des arguments à passer à l&#8217;exécutable (<code>Vector.&lt;String&gt;</code> sous Flash Player 10, ou un bête <code>Array</code> sinon)</li>
</ul>
<p>Vous pourrez alors instancier un objet NativeProcess et lui passer cet objet de paramétrage avant de le lancer.</p>
<h3>Lancement &amp; suivi de l&#8217;exécution</h3>
<p>Le lancement d&#8217;un NativeProcess est asynchrone. Il propose donc un certain nombre d&#8217;événements vous permettant de suivre son exécution une fois lancé, notamment :</p>
<ul>
<li><strong>ProgressEvent.STANDARD_OUTPUT_DATA</strong> : écriture sur la sortie standard</li>
<li><strong>ProgressEvent.STANDARD_ERROR_DATA</strong> : écriture sur la sortie d&#8217;erreur</li>
<li><strong>IOErrorEvent.STANDARD_OUTPUT_IO_ERROR</strong> : déclenché lorsqu&#8217;une erreur apparaît en tentant de lire la sortie standard</li>
<li><strong>IOErrorEvent.STANDARD_ERROR_IO_ERROR</strong> : déclenché lorsqu&#8217;une erreur apparaît en tentant de lire la sortie d&#8217;erreur</li>
<li><strong>NativeProcessExitEvent.EXIT</strong> : déclenché lors que l&#8217;exécution du process est terminée</li>
</ul>
<h3>Lecture de l&#8217;entrée / sortie standard</h3>
<p>Bien que tout à fait possible, la lecture de la sortie standard ou d&#8217;erreur via le listener <code>ProgressEvent.STANDARD_OUTPUT_DATA</code> ou <code>ProgressEvent.STANDARD_ERROR_DATA</code> n&#8217;est pas fiable à 100% concernant le contenu retourné : la sortie étant &laquo;&nbsp;bufferisée&nbsp;&raquo;, vous n&#8217;aurez donc pas systématiquement le même résultat selon la machine exécutant le programme, à chaque appel de votre listener&#8230; N&#8217;utilisez donc la lecture de sortie standard que pour afficher ce qui se passe, ou à la limite récupérer la totalité du contenu écrit une fois le process terminé&#8230;</p>
<h2>Appeler un JAR</h2>
<h3>Rappels</h3>
<p>Pour appeler un JAR en Java, il doit être exécutable (bah oui&#8230;), et appelé en ligne de commande de la manière suivante :<br />
<code><br />
java -jar monJar.jar [-cp jars du classpath]<br />
</code><br />
Nous sommes dans une appli AIR, donc évitons de surcharger la commande à appeler avec un classpath, aussi je vous suggère d&#8217;utiliser les fonctionnalités d&#8217;export complets d&#8217;un JAR (si les licences associées vous l&#8217;autorisent) intégrant au final l&#8217;ensemble des sources dans un groooos JAR contenant tout ce qu&#8217;il lui faut pour fonctionner.<br />
<strong>Notes :</strong></p>
<ul>
<li>Les utilisateurs de Maven peuvent utiliser <a title="Plugin maven assembly et configuration associée" href="http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven">le plugin qui va bien pour ça</a>.</li>
<li>L&#8217;export eclipse, c&#8217;est pas mal non plus, il suffit de cocher la &laquo;&nbsp;case qui va bien&nbsp;&raquo; au moment d&#8217;exporter</li>
</ul>
<h3>Depuis un NativeProcess</h3>
<p>On voit mieux ce qui se dessine:</p>
<ol>
<li>Définir l&#8217;exécutable java dans vos &laquo;&nbsp;startup infos&nbsp;&raquo;</li>
<li>Définir les arguments
<ul>
<li>-jar</li>
<li>/chemin/vers/monJar.jar</li>
</ul>
</li>
<li>Ajouter les listeners permettant de savoir lorsque l&#8217;exécution est terminée</li>
<li>Lancer le native process</li>
</ol>
<h3>Restons multi plateforme</h3>
<p>Java est multi plateforme, oui, mais l&#8217;exécutable dépend de la plateforme, aussi il vous faudra récupérer le chemin vers votre JAVA_HOME (contenant le répertoire bin avec l&#8217;exécutable Java).<br />
Vous avez donc deux solutions maintenant:</p>
<ol>
<li><strong>La plus simple</strong> (pour le développeur) : demander à votre gentil utilisateur où est son JAVA_HOME. Ça peut le faire si c&#8217;est un geek velu qui a compris qu&#8217;on ne parlait pas de venir danser chez lui (aïe, elle est rude celle-ci)</li>
<li><strong>La plus compliquée</strong> (mais pratique pour l&#8217;utilisateur) : utiliser un autre exécutable (voire NativeProcess) qui remonte cette information ou permette de pointer directement sur l&#8217;exécutable en question</li>
</ol>
<p>La seconde solution bien que séduisante est un peu plus longue à implémenter.<br />
Pour les développeurs sous Windows, j&#8217;ai noté l&#8217;utilisation par <a href="www.webkitchen.be">Serge Jespers</a> d&#8217;un petit (mais pratique) exécutable &laquo;&nbsp;jexe.exe&nbsp;&raquo; lançant le java.exe présent dans le %JAVA_HOME%\bin de la machine. L&#8217;utiliser vous évitera la première solution, sans vous lancer dans un développement spécifiquement dédié à cela (merci Serge). En revanche, si votre application est diffusée à un public d&#8217;utilisateurs non avertis, ils sont tout à fait susceptibles de ne pas avoir de variable JAVA_HOME définie sur leur machine : pensez donc à déterminer précisément votre cible avant de choisir une solution.</p>
<p>J&#8217;ai également noté en relisant un extrait de la licence du JRE que la redistribution est autorisée sous certaines conditions. Si vous les remplissez, vous pourriez carrément embarquer le runtime java dans votre application AIR, au risque de la faire gonfler en taille&#8230;</p>
<h2>Un exemple ! Un exemple !</h2>
<p>Voici un petit exemple de code permettant de lancer un JAR exécutable depuis une application AIR :</p>
<pre class="brush: java">
package com.lafabrick.nativeprocess
{
import flash.desktop.NativeProcess;
import flash.desktop.NativeProcessStartupInfo;
import flash.events.EventDispatcher;
import flash.events.NativeProcessExitEvent;
import flash.events.ProgressEvent;
import flash.filesystem.File;
import flash.system.Capabilities;

public class JarExec
{
protected var _process:NativeProcess;

public function JarExec()
{
}

public function getDefaultJavaExecutable():File
{
if (Capabilities.os.toLowerCase().indexOf(&quot;win&quot;) &gt; -1)
{
return File.applicationDirectory.resolvePath(&quot;native/jexe.exe&quot;);
}
if (Capabilities.os.toLowerCase().indexOf(&quot;mac&quot;) &gt; -1)
{
// TODO: Changer avec un paramètre de configuration
return new File(&quot;/System/Library/Frameworks/JavaVM.framework/Commands/java&quot;);
}
throw new Error(&quot;Système non pris en charge&quot;);
return null;
}

public function testJava(executablePath:String = null):void
{
// Tester le lancement de l&#039;exécutable &#039;java&#039;
try
{
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
nativeProcessStartupInfo.workingDirectory = File.applicationDirectory;
nativeProcessStartupInfo.executable = (executablePath == null ? getDefaultJavaExecutable() : new File(executablePath));

var args:Vector.&lt;String&gt; = new Vector.&lt;String&gt;();
args.push(&quot;-version&quot;);
nativeProcessStartupInfo.arguments = args;

_process = new NativeProcess();
_process.addEventListener(NativeProcessExitEvent.EXIT, onJavaTestExit);
_process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onStandardOut);
_process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorOut);
_process.start(nativeProcessStartupInfo);

trace(&quot;-- Début d&#039;exécution&quot;);
}
catch (e:Error)
{
trace(&quot;Impossible de lancer le process\n&quot; + e.message + &quot;\n&quot; + e.getStackTrace());
}
}
protected function onStandardOut(e:ProgressEvent):void
{
trace(&quot;STDOUT: &quot; + _process.standardOutput.readUTFBytes(_process.standardOutput.bytesAvailable));
}
protected function onErrorOut(e:ProgressEvent):void
{
trace(&quot;STDERR: &quot; + _process.standardError.readUTFBytes(_process.standardError.bytesAvailable));
}
protected function onJavaTestExit(e:NativeProcessExitEvent):void
{
trace(&quot;-- Fin d&#039;exécution&quot;);
}
}
}
</pre>
<p>Cet extrait donne un aperçu, mais vous pouvez vous lancer (soyons fous) à installer le package suivant :</p>
<table style="text-align: center;">
<tbody>
<tr>
<td><a href="http://www.lafabrick.com/labz/nativeprocess/NativeJarExec.dmg"><img title="Mac" src="http://www.lafabrick.com/blog/wp-content/uploads/2010/07/mac.gif" alt="" width="50" height="50" /><br />
Pour Mac</a></td>
<td><a href="http://www.lafabrick.com/labz/nativeprocess/NativeJarExec.exe"><img title="Windows" src="http://www.lafabrick.com/blog/wp-content/uploads/2010/07/windows.jpeg" alt="" width="50" height="50" /><br />
Pour Windows</a></td>
</tr>
</tbody>
</table>
<p>Pensez au clic droit &gt; View Source&#8230;</p>
<h2>Packager l&#8217;application</h2>
<p>Comme je le disais au début de ce post, il est nécessaire de packager votre application dans le format natif du système d&#8217;exploitation visé. Vous avez deux solutions pour cela :</p>
<ol>
<li>Passer par la dernière version de Flash Builder 4 qui propose cette fonctionnalité</li>
<li>Utiliser l&#8217;application <a href="http://www.webkitchen.be/package-assistant-pro/">PackageAssistantPro</a> proposée par <a href="http://www.webkitchen.be">Serge Jespers</a> (re merci Serge)</li>
</ol>
<p>Il s&#8217;agit d&#8217;une application AIR utilisant des NativeProcess (et packagée en ligne de commande vu que l&#8217;application n&#8217;existait pas avant&#8230; Remarquez, la version 2 et plus ont probablement été packagées avec la version 1&#8230; Mais je m&#8217;égare)</p>
<h2>Quelques liens</h2>
<ul>
<li>Un petit exemple d&#8217;application utilisant un NativeProcess : <a href="http://www.lafabrick.com/blog/2010/07/28/2092-zxpackager-application-pour-l%e2%80%99empaquetage-zxp-d%e2%80%99extensions-cs5/">ZXPackager</a></li>
<li><a lang="en_US" href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/desktop/NativeProcess.html">ASDoc de la classe NativeProcess [EN]</a></li>
<li><a lang="en_US" href="http://www.adobe.com/devnet/air/flex/quickstart/interacting_with_native_process.html">Un bon article pour démarrer [EN]</a></li>
</ul>
<p>Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2008/02/04/299-un-projet-java-flex-avec-maven-2/" rel="bookmark" title="4 février 2008">Un projet Java / Flex avec Maven 2</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/04/06/1754-arduino-2-flash-socket-et-processing/" rel="bookmark" title="6 avril 2010">Arduino #2 : Flash, socket et Processing</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/07/28/2092-zxpackager-application-pour-l%e2%80%99empaquetage-zxp-d%e2%80%99extensions-cs5/" rel="bookmark" title="28 juillet 2010">ZXPackager : application pour l’empaquetage ZXP d’extensions CS5</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/10/21/2272-rollingfiletarget-pour-air-2-0-lets-roll/" rel="bookmark" title="21 octobre 2010">RollingFileTarget pour AIR 2.0 : let&#8217;s roll !</a></li>
</ul>
<p><!-- Similar Posts took 12.164 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2010/08/20/2167-air-2-appeler-un-jar-executable-via-un-nativeprocess/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>FlashBuilder/Eclipse : installation guide &#8211; subclipse, PDT, WTP and Maven</title>
		<link>http://www.lafabrick.com/blog/2009/06/11/1174-flashbuildereclipse-installation-guide-subclipse-pdt-wtp-and-maven/</link>
		<comments>http://www.lafabrick.com/blog/2009/06/11/1174-flashbuildereclipse-installation-guide-subclipse-pdt-wtp-and-maven/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 08:35:53 +0000</pubDate>
		<dc:creator>Fabien</dc:creator>
				<category><![CDATA[Logiciels / extensions / plugins...]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[FlashBuilder]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[PDT]]></category>
		<category><![CDATA[subclipse]]></category>
		<category><![CDATA[WTP]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=1174</guid>
		<description><![CDATA[This installation guide step by step is based on my needs: I am user of Java and Maven technologies, and Tomcat and JBoss servers. This installation allows you to get all the tools necessary for these types of developments, starting from a “from scratch” Eclipse IDE or a standalone FlashBuilder. Start ! Need an IDE [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.lafabrick.com/blog/images/installDevGuideFB/FlashBuilder.jpg" alt="FlashBuilder" /></p>
<p>
This installation guide step by step is based on my needs: I am user of Java and Maven technologies, and Tomcat and JBoss servers. This installation allows you to get all the tools necessary for these types of developments, starting from a “from scratch” Eclipse IDE or a standalone FlashBuilder.
</p>
<p><span id="more-1174"></span></p>
<h2>Start !</h2>
<p>Need an IDE ! 2 ways : Eclipse and FlashBuilder plug-in, or the standalone distribution of FlashBuilder.</p>
<ul>
<li><a href="http://www.eclipse.org/downloads/">Link for Eclipse</a> (take the Eclipse Classic distribution)</li>
<li><a href="http://labs.adobe.com/technologies/flashbuilder4/">Link for FlashBuilder</a></li>
</ul>
<p>I use in this guide FlashBuilder, standalone distribution.</p>
<p><center><strong>Note : FlashBuilder, is now an Eclipse Ganymede package (3.4). For against, FlashBuilder has preserved the update system of Eclipse Europa version. More simple, I am sure you will have no problem to install all features if you choose the pack Eclipse+Flex plug-in !</strong></center></p>
<p></p>
<table width="100%">
<tr  valign="top">
<td width="50%"><center><img src="http://www.lafabrick.com/blog/images/installDevGuideFB/SoftwareUpdatesFlashBuilder.jpg" alt="FlashBuilder Softwares Updates" /><br />FlashBuilder Softwares Updates</center></td>
<td width="50%"><center><img src="http://www.lafabrick.com/blog/images/installDevGuideFB/SoftwareUpdatesGanymede.jpg" alt="Ganymede Softwares Updates" /><br />Ganymede Softwares Updates</center></p>
<ul>
<li>Remote site management with &laquo;&nbsp;Manages Sites&nbsp;&raquo; : you just need to provide the url.</li>
<li>The  selection of required plug-ins is automatic (be sure you have select all you need in &laquo;&nbsp;Manages Sites&nbsp;&raquo;)</li>
</ul>
</td>
</table>
<h2>Subclipse : subversion for Eclipse</h2>
<p><a href="http://subclipse.tigris.org/">Subclipse</a> is an eclipse plug-in which provides support for Subversion (SVN).</p>
<p>To install subclipse :</p>
<ul>
<li>open “<strong>Help > Softawre Updates > Find and install&#8230;</strong>” dialog box.</li>
<li>Choose “<strong>Search for new features to Install</strong>” and click on “<strong>Finish</strong>”.</li>
<li>In the next box, click on “<strong>new remote site</strong>”. The dialog box for enter an update site appear.</li>
<li>Type “<strong>subclipse</strong>” in Name input, and “<strong>http://subclipse.tigris.org/update_1.6.x</strong>” in the url update address input.<br /><img src="http://www.lafabrick.com/blog/images/installDevGuideFB/newRemoteSite-subclipse.jpg" alt="subclipse, update remote site" /></li>
<li>Click on “<strong>Ok</strong>”.<br />Verify in the list of includes sites that subclipse is selected. Select also “<strong>Ganymede Discovery Site</strong>” (Europa if your are on a Eclipse 3.3 IDE).<br /><img src="http://www.lafabrick.com/blog/images/installDevGuideFB/installSublcipse-selectRequired.jpg" alt="subclipse, select required" /></li>
<li>Click on “<strong>Finish</strong>”.</li>
<li>In the search results box, open the Sublclipse folder, en select “<strong>Subclipse</strong>”. An error appears. Don’t panic! Some additional plug-in are necessary. Click on “<strong>Select Required</strong>” button: Eclipse check the list of not found plug-in, and select automatically all required plug-in in Ganymede Discovery Site.</li>
<li>Click on “<strong>Next</strong>”. Some validation, and other dialog box appear. Validate all boxes.</li>
<li>you can also take a coffee&#8230; But <strong>attention</strong> ! A lot of coffee can be taken during this installation.</li>
</ul>
<h2>For PHP developer : PDT !</h2>
<p>You know : with eclipse you can make coffee ! Some cool tool exist for Eclipse. If you are a PHP developer, you can use PDT &#8211; PHP Development Tool.<br />
PDT, like WTP &#8211; See further- add to your Eclipse some tools for developing PHP application.<br />
For more information about PDT, visit the <a href="http://www.eclipse.org/pdt/">PDT homepage</a>.</p>
<p>To Install PDT, follow these steps :</p>
<ul>
<li>In “<strong>Help > Softawre Updates > Find and install&#8230;</strong>” , choose “<strong>Search for new features to Install</strong>” and click on “<strong>Finish</strong>”.</li>
<li>Next, you need to add 2 Remote Site : <strong>PDT</strong>, and <strong>DLTK</strong> &#8211; <a href="http://www.eclipse.org/dltk/">Dynamic Language ToolKit</a>.<br />Click on “<strong>new remote site</strong>” :
<ul>
<li>Adding <strong>PDT</strong> : in Name input, type “<strong>PDT</strong>”, and for url : “<strong>http://download.eclipse.org/tools/pdt/updates/2.0/</strong>”</li>
<li>Adding <strong>DLTK</strong> :  in Name input, type “<strong>DLTK</strong>”, and for url : “<strong>http://download.eclipse.org/technology/dltk/updates-dev/1.0M4-PDT-2.0/</strong>”</li>
</ul>
<p>Verify in the list of includes sites that PDT and DLTK are selected. Select also “<strong>Ganymede Discovery Site</strong>”, and click on “<strong>Finish</strong>”.
	</li>
<li>In the list, select &laquo;&nbsp;<strong>PDT > PDT SDK 2.0.x > PDT SDK Feature</strong>”. An error appear : click on “<strong>Select required</strong>”. Then, “<strong>Next</strong>”.<br /><img src="http://www.lafabrick.com/blog/images/installDevGuideFB/PDT-install.jpg" alt="PDT, jar selection" /></li>
<li><strong>Another coffee?</strong></li>
</ul>
<p>If your needs is just PHP : Stop ! The following is just for Java developers.</p>
<h2>Web Tools Platform : a tribute to Java</h2>
<p>Web Tools Platform (WTP) is a package of some tools for your eclipse IDE, which provides you to develop web and J2EE application. WTP add to your IDE the J2EE perspective (a very good view of your code), Some other stuff is added with the WTP. I invite you to discover all this !<br />
For more information about WTP, visit the <a href="http://www.eclipse.org/webtools/">Webtools homepage</a>.</p>
<p>Installing WTP is like the installation of subclise. More simple.
</p>
<ul>
<li>Open “<strong>Help > Softawre Updates > Find and install&#8230;</strong>”.</li>
<li>Choose “<strong>Search for new features to Install</strong>” and click on “<strong>Finish</strong>”.</li>
<li>Select “<strong>Ganymede Discovery Site</strong>” and click on “<strong>Finish</strong>”.</li>
<li>Open “<strong>Ganymede Discovery Site</strong>”, select “<strong>Web and Java EE Development</strong>”, and click on “<strong>Select Required</strong>”.<br /><img src="http://www.lafabrick.com/blog/images/installDevGuideFB/WTP-required.jpg" alt="WTP, jar selection" /></li>
<li>Click on “<strong>Finish</strong>”. Like subclipse, some validation and other dialog box appear. Validate all.</li>
<li><strong>Coffee Time</strong></li>
</ul>
<p>Your IDE is now ready for good coding ! </p>
<h2>Maven : manager of project</h2>
<p>Based on the concept of a project object model (POM), Maven can manage a project&#8217;s build, reporting and documentation from a central piece of information.<br />
Maven is the perfect tool for continuous integration and version tracking of your jar, swc, war, &#8230;<br />
For more information about Maven, visit the <a href="http://maven.apache.org/">maven homepage</a>.<br />
<a href="http://m2eclipse.codehaus.org/">m2Eclipse is the Maven2 plugin for Eclipse</a>. This plug-in ads all you need to integrate Maven into your projects.</p>
<p>For the installation of m2Eclipse, you need to add another remote update site.
</p>
<ul>
<li>Go to “<strong>Help > Softawre Updates > Find and install&#8230;</strong>”.</li>
<li>Choose “<strong>Search for new features to Install</strong>” and click on “<strong>Finish</strong>”.</li>
<li>Click on “<strong>new remote site</strong>”.</li>
<li>Type “<strong>m2Eclipse</strong>” in Name input, and “<strong>http://m2eclipse.sonatype.org/update/</strong>“ in the url update address input.<br /><img src="http://www.lafabrick.com/blog/images/installDevGuideFB/m2eclipseRemoteSite.jpg" alt="m2eclipse - remote update site" /></li>
<li>Click on “<strong>Ok</strong>”.</li>
<li>Verify in the list of includes sites that m2eclipse is selected. Click on “<strong>Finish</strong>”.</li>
<li>Now You need to select the list of Maven plug-in to install. The minimum required is to select all in the folder “Maven Integration” except POM XML Editor (for me, I have selected this feature), and POM Editor.<br />
 For a better integration with WTP and Subclipse, I select also the “<strong>Maven integration for WTP</strong>” (in Maven Project Configurators”) and “<strong>Maven Central repository index</strong>”, “Maven SCM handler for Subclipse” (in Maven Optional Components”).<br /><img src="http://www.lafabrick.com/blog/images/installDevGuideFB/minimumUpdateForm2eclipse.jpg" alt="m2eclipse : minimum selection" /></li>
<li>Click on “Next”.</li>
<li>After passing all validations, &#8230;. <strong>Another coffee time</strong> !</li>
</ul>
<h2>Finish !</h2>
<p>Now : restart your IDE&#8230;. And <strong>let’s gamble</strong> ! With all these coffees you can’t sleep anyway &#8230; it can be time to start your project? </p>
<p>Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/08/22/203-import-de-framework-via-svn-et-le-plug-in-subclipse/" rel="bookmark" title="22 août 2007">Import de framework via SVN et le plug-in Subclipse</a></li>
<li><a href="http://www.lafabrick.com/blog/2007/07/25/194-installer-son-environnement-de-dveloppement-tomcat-eclipse-wtp-flex-builder-maven-2/" rel="bookmark" title="25 juillet 2007">Installer son environnement de développement : Tomcat &#8211; Eclipse &#8211; WTP &#8211; Flex Builder</a></li>
<li><a href="http://www.lafabrick.com/blog/2007/10/14/254-maven-2-flex-2-une-synergie-possible/" rel="bookmark" title="14 octobre 2007">Maven 2 &#8211; Flex 2 &#8211; une synergie possible ?</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/02/27/309-flex-builder-3-et-le-php/" rel="bookmark" title="27 février 2008">Flex Builder 3 et le PHP ( PDT ) : installation</a></li>
</ul>
<p><!-- Similar Posts took 12.103 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2009/06/11/1174-flashbuildereclipse-installation-guide-subclipse-pdt-wtp-and-maven/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Un projet Java / Flex avec Maven 2</title>
		<link>http://www.lafabrick.com/blog/2008/02/04/299-un-projet-java-flex-avec-maven-2/</link>
		<comments>http://www.lafabrick.com/blog/2008/02/04/299-un-projet-java-flex-avec-maven-2/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 18:31:14 +0000</pubDate>
		<dc:creator>Hervé</dc:creator>
				<category><![CDATA[La Fabrick]]></category>
		<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[Tutoriels]]></category>

		<guid isPermaLink="false">http://92.243.2.196/lafabrick/blog/?p=299</guid>
		<description><![CDATA[<p>Après un premier tuto sur la création d'un projet Flex avec Maven 2, nous pouvons maintenant nous pencher sur un chantier plus important encore&#160;: comment compiler mon Flex <strong>puis</strong> ma webapp Java en une fois avec Maven 2&#160;?</p> <p>Comment personnaliser un peu la compilation Flex pour l'adapter à mes besoins ?</p> <p>C'est par là...</p>]]></description>
			<content:encoded><![CDATA[<p>Après un premier tuto sur la création d&#8217;un projet Flex avec Maven 2, nous pouvons maintenant nous pencher sur un chantier plus important encore : comment compiler mon Flex <strong>puis</strong> ma webapp Java en une fois avec Maven 2 ?</p>
<p>Comment personnaliser un peu la compilation Flex pour l&#8217;adapter à mes besoins ?</p>
<p>C&#8217;est par là&#8230;</p>
<p><span id="more-299"></span></p>
<h2>Introduction</h2>
<p>Si vous êtes ici, c&#8217;est donc que vous disposez :</p>
<ul>
<li>d&#8217;un fichier <em>start.cmd</em> qui vous permet de lancer une ligne de commande permettant l&#8217;usage de Maven avec Flex</li>
<li>d&#8217;un projet Flex de test, constructible via Maven 2 et donc de son fichier <em>pom.xml</em></li>
</ul>
<h3>Ce que nous allons faire</h3>
<p>L&#8217;objectif est simple, une application Flex ne venant jamais seule, il devient rapidement intéressant de non seulement construire son SWF, mais également de préparer son WAR. Dans ces cas là, il devient intéressant de pouvoir effectuer ces tâches en une seule fois.</p>
<h3>En pratique</h3>
<p>Maven offre une possibilité très intéressante : le POM parent. Il s&#8217;agit en fait d&#8217;un &laquo;&nbsp;Meta POM&nbsp;&raquo; décrivant un ensemble de modules d&#8217;un projet plus global. Vous l&#8217;avez compris, votre projet global est une application Java / Flex, vos modules sont :</p>
<ul>
<li>L&#8217;application Flex d&#8217;un côté</li>
<li>La webapp Java de l&#8217;autre</li>
</ul>
<p>De ce fait, nous allons avoir trois fichiers pom.xml :</p>
<ol>
<li>Le POM parent décrivant le projet global (le fameux Meta POM)</li>
<li>Le POM du projet Flex</li>
<li>Le POM du projet Java</li>
</ol>
<h2>A nos outils</h2>
<h3>Construction de l&#8217;arborescence du projet</h3>
<p>Maven propose (encore ?!) un outil très intéressant : les archetype. L&#8217;idée est de permettre la construction d&#8217;une arborescence type de projet en une ligne de commande.</p>
<p>Si je reprends l&#8217;arborescence du toto précédent, vous devez vous positionner dans le répertoire parent de <em>demo-flex</em>, soit, dans l&#8217;exemple suivant, au niveau de <em>lafabrick</em> :</p>
<p><img src="/blog/images/maven 2/arboProjet2.jpg" alt="" /></p>
<p>Vous pouvez alors exécuter la fameuse ligne de commande : <code>mvn archetype:create -DgroupId=com.lafabrick -Dpackagename=com.lafabrick -DartifactId=demo-java -DarchetypeArtifactId=maven-archetype-webapp</code></p>
<p>A la suite de cela, vous pouvez constater que l&#8217;arborescence suivante a été créée :</p>
<p><img src="/blog/images/maven 2/arboProjet3.jpg" alt="" /></p>
<p>Vous constaterez également qu&#8217;un fichier <em>pom.xml</em> a été automatiquement créé dans le répertoire <em>demo-java</em>. Ce fichier est un fichier standard décrivant une webapp Java. Il ne reste à présent plus qu&#8217;à créer notre Meta POM et a indiquer à nos deux modules qu&#8217;ils sont des modules de ce dernier.</p>
<p>Voici le fichier <em>pom.xml</em> à créer au niveau du répertoire <em>lafabrick</em> (cf. arborescence ci-dessus).</p>
<pre class="brush: xml">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;
xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;

&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
&lt;groupId&gt;com.lafabrick&lt;/groupId&gt;
&lt;artifactId&gt;parent&lt;/artifactId&gt;
&lt;packaging&gt;pom&lt;/packaging&gt;
&lt;version&gt;1.0&lt;/version&gt;
&lt;name&gt;Projet Java Flex avec lafabrick&lt;/name&gt;
&lt;url&gt;http://maven.apache.org&lt;/url&gt;
&lt;dependencies&gt;
&lt;dependency&gt;
&lt;groupId&gt;junit&lt;/groupId&gt;
&lt;artifactId&gt;junit&lt;/artifactId&gt;
&lt;version&gt;3.8.1&lt;/version&gt;
&lt;scope&gt;test&lt;/scope&gt;
&lt;/dependency&gt;
&lt;/dependencies&gt;
&lt;modules&gt;
&lt;module&gt;demo-flex&lt;/module&gt;
&lt;module&gt;demo-java&lt;/module&gt;
&lt;/modules&gt;
&lt;/project&gt;
</pre>
<p>Ce Meta POM (oui, j&#8217;aime bien cette expression bizarre) est finalement plutôt synthétique : il indique bien nos deux modules <em>demo-java</em> et <em>demo-flex</em> comme faisant partie d&#8217;un projet global nommé <em>Projet Java Flex avec lafabrick</em>.</p>
<p>Il reste à présent encore une dernière chose à faire : lier nos module au Meta POM (yes !).</p>
<p>Pour cela, ouvrez les fichiers <em>pom.xml</em> de chacun des projets et ajoutez-y les informations suivantes en tête de fichier (juste après le noeud racine <code>&lt;project&gt;</code>)</p>
<pre class="brush: js">
&lt;parent&gt;
&lt;groupId&gt;com.lafabrick&lt;/groupId&gt;
&lt;artifactId&gt;parent&lt;/artifactId&gt;
&lt;version&gt;1.0&lt;/version&gt;
&lt;/parent&gt;
</pre>
<p>Testons l&#8217;ensemble :</p>
<ul>
<li>rendez-vous dans le répertoire <em>lafabrick</em></li>
<li>ouvrez votre ligne de commande et tapez <code>mvn clean package</code></li>
</ul>
<p>Le résultat : nous avons à présent un fichier <strong>demo-flex-1.0.swf</strong> dans <em>demo-flex/target</em> et (entre autres) un fichier <strong>demo-java.war</strong> dans le répertoire <em>demo-java/target</em>.</p>
<p>Mouais, pas mal, mais comment faire en sorte que le résultat de ma compil SWF aille dans ma webapp ? C&#8217;est simple, il suffit de modifier la propriété <code>directory</code> de votre projet flex.</p>
<p>Pour cela, modifiez le fichier <em>pom.xml</em> du projet Flex en ajoutant, dans la balise <code>&lt;build&gt;</code>, la ligne suivante :</p>
<pre class="brush: js">
&lt;directory&gt;${basedir}/../demo-java/src/main/webapp/flex&lt;/directory&gt;
</pre>
<p>Enregistrez et relancez la commande de construction du projet (comme tout à l&#8217;heure).</p>
<p>Voilà qui est mieux ! Le résultat est placé dans le répertoire <em>demo-java/src/main/webapp/flex</em> qui est ensuite inclus dans le WAR.</p>
<p><strong>Attention cependant : en manipulant le répertoire de sortie du SWF, maven va, à chaque <em>clean</em>, supprimer la totalité du répertoire concerné, aussi, n&#8217;indiquez pas <em>demo-java/src/main/webapp</em>, vous vou retrouveriez à supprimer l&#8217;ensemble des sources de la webapp !</strong>;</p>
<h2>Aller plus loin</h2>
<h3>BlazeDS ?</h3>
<p>Vous pourriez en vouloir un peu plus, notamment concernant les options de compilation de l&#8217;application Flex : il est probable que vous ayez à indiquer par exemple le fichier &lt;em&gt;services-config.xml&lt;/em&gt; à utiliser dans le cadre de l&#8217;utilisation des <a hreflang="en" href="labs.adobe.com/technologies/blazeds">BlazeDS</a>. Il faut savoir que le plugin ServeBox permet de modifier toutes (ou presque) les options de compilations disponibles avec <code>mxmlc</code>.</p>
<p>Aussi, je peux modifier mon fichier <em>pom.xml</em> le fichier <em>services-config.xml</em> à utiliser :</p>
<pre class="brush: js">
&amp;lt;build&amp;gt;
&lt;directory&gt;${basedir}/../demo-java/src/main/webapp/flex&lt;/directory&gt;
&amp;lt;plugins&amp;gt;
&amp;lt;plugin&amp;gt;
&amp;lt;groupId&amp;gt;org.servebox.flex2&amp;lt;/groupId&amp;gt;
&amp;lt;artifactId&amp;gt;flex2-plugin&amp;lt;/artifactId&amp;gt;
&amp;lt;version&amp;gt;0.9.1&amp;lt;/version&amp;gt;
&amp;lt;extensions&amp;gt;true&amp;lt;/extensions&amp;gt;
&amp;lt;configuration&amp;gt;
&amp;lt;sourceDirectory&amp;gt;/src/main/flex&amp;lt;/sourceDirectory&amp;gt;
&amp;lt;mxmlFile&amp;gt;src/main/flex/Main.mxml&amp;lt;/mxmlFile&amp;gt;
&amp;lt;services&amp;gt;${basedir}/../demo-java/src/main/webapp/WEB-INF/flex/services-config.xml&amp;lt;/services&amp;gt;
&amp;lt;contextroot&amp;gt;demo-java&amp;lt;/contextroot&amp;gt;
&amp;lt;/configuration&amp;gt;
&amp;lt;/plugin&amp;gt;
&amp;lt;/plugins&amp;gt;
&amp;lt;/build&amp;gt;
</pre>
<p>Et voilà qui est fait.</p>
<h3>Les différentes options disponibles pour l&#8217;instant&#8230;</h3>
<p>Après un tour dans les sources du plugin, on retrouve la liste suivante des possibilités de paramétrage :</p>
<ul>
<li><strong>home</strong> (chemin vers le répertoire du SDK)<br />
Par défaut, prendra la valeur de la variable d&#8217;environnement <em>FLEX_HOME</em></li>
<li><strong>config</strong> (chemin vers le fichier <em>flex-config.xml</em> du SDK)<br />
Par défaut : <em>${flex2.sdk.home}/frameworks/flex-config.xml</em></li>
<li><strong>out</strong> (répertoire cible de la génération du SWF / SWC)<br />
Par défaut : le répertoire <code>&lt;directory&gt;</code> indiqué dans la section <code>&lt;build&gt;</code> du POM</li>
<li><strong>source</strong> (répertoire de sources Flex)<br />
Par défaut : <em>src/main/flex</em></li>
<li><strong>optimize</strong> (optimisation du bytecode)<br />
Par défaut : <em>true</em></li>
<li><strong>strict</strong> (mode strict)<br />
Par défaut : <em>true</em></li>
<li><strong>Xmx</strong> (taille de la mémoire en Mo allouée au compilateur)<br />
Par défaut : <em>128</em></li>
<li><strong>contextroot</strong> (nom du contexte de la webapp)<br />
Par défaut : <em>- vide -</em></li>
<li><strong>services</strong> (fichier <em>services-config.xml</em> à utiliser)<br />
Par défaut : <em>- vide -</em></li>
<li><strong>useNetwork</strong> (utilisation du réseau ou non)<br />
Par défaut : <em>true</em></li>
<li><strong>chartinglicence</strong> (votre licence des composants graphiques)<br />
Par défaut : <em>- vide -</em></li>
<li><strong>asencoding</strong> (encodage de caractères des sources AS)<br />
Par défaut : <em>utf-8</em></li>
<li><strong>debug</strong> (mode debug)<br />
Par défaut : <em>false</em></li>
<li><strong>showbindingwarnings</strong> (warning sur les détections de changements de contrôle non pris en compte)<br />
Par défaut : <em>true</em></li>
<li><strong>showaswarnings</strong> (warning sur les classes ActionScript)<br />
Par défaut : <em>true</em></li>
<li><strong>showdeprecationwarnings</strong> (warning si utilisation de notations dépréciées)<br />
Par défaut : <em>true</em></li>
<li><strong>showtypeselectorwarnings</strong> (warning si utilisation <code>&lt;mx:Style&gt;</code>)<br />
Par défaut : <em>true</em></li>
<li><strong>accessible</strong> (mode accessible)<br />
Par défaut : <em>false</em></li>
</ul>
<p>Avec ça, si on peut pas faire du Flex avec Maven, c&#8217;est que vous utilisez les modules (RSL), et que ce n&#8217;est pas encore pris en compte&#8230;</p>
<p>A bientôt !Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/07/25/194-installer-son-environnement-de-dveloppement-tomcat-eclipse-wtp-flex-builder-maven-2/" rel="bookmark" title="25 juillet 2007">Installer son environnement de développement : Tomcat &#8211; Eclipse &#8211; WTP &#8211; Flex Builder</a></li>
<li><a href="http://www.lafabrick.com/blog/2007/10/14/254-maven-2-flex-2-une-synergie-possible/" rel="bookmark" title="14 octobre 2007">Maven 2 &#8211; Flex 2 &#8211; une synergie possible ?</a></li>
<li><a href="http://www.lafabrick.com/blog/2007/10/03/256-titre/" rel="bookmark" title="3 octobre 2007">Utiliser Cairngorm dans un projet Flex / AMFPHP</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/08/20/2167-air-2-appeler-un-jar-executable-via-un-nativeprocess/" rel="bookmark" title="20 août 2010">AIR 2 : appeler un JAR exécutable via un NativeProcess</a></li>
</ul>
<p><!-- Similar Posts took 16.944 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2008/02/04/299-un-projet-java-flex-avec-maven-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Maven 2 &#8211; Flex 2 &#8211; une synergie possible ?</title>
		<link>http://www.lafabrick.com/blog/2007/10/14/254-maven-2-flex-2-une-synergie-possible/</link>
		<comments>http://www.lafabrick.com/blog/2007/10/14/254-maven-2-flex-2-une-synergie-possible/#comments</comments>
		<pubDate>Sun, 14 Oct 2007 02:30:33 +0000</pubDate>
		<dc:creator>Hervé</dc:creator>
				<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://92.243.2.196/lafabrick/blog/?p=254</guid>
		<description><![CDATA[<p>A l'heure où <a href="http://maven.apache.org" hreflang="en">maven 2</a> s'impose peu à peu comme standard de gestion du packaging et du déploiement des projets Java, il devenait clair que ce succès allait approcher le monde Flex, du fait de la courante association de ces deux technologies. Cet article tente de faire un tour de la situation actuelle en rappelant sommairement le fonctionnement et l’intérêt de maven 2 dans le cadre du développement de projets Java et en synthétisant les fonctions offertes par le plugin développé par l’équipe de ServeBox dans le cadre du framework Java / Flex ServeBox Foundry.</p>]]></description>
			<content:encoded><![CDATA[<p>A l&#8217;heure où <a hreflang="en" href="http://maven.apache.org">maven 2</a> s&#8217;impose peu à peu comme standard de gestion du packaging et du déploiement des projets Java, il devenait clair que ce succès allait approcher le monde Flex, du fait de la courante association de ces deux technologies. Cet article tente de faire un tour de la situation actuelle en rappelant sommairement le fonctionnement et l’intérêt de maven 2 dans le cadre du développement de projets Java et en synthétisant les fonctions offertes par le plugin développé par l’équipe de ServeBox dans le cadre du framework Java / Flex ServeBox Foundry.</p>
<p><span id="more-254"></span></p>
<h4>De l’intérêt de Maven 2</h4>
<h5>Kézako</h5>
<p>Maven 2 est un (puissant) outil open source créé pour gérer la « périphérie technique » d’un projet java : de sa description (version, dépendances) à son déploiement en passant par l’ensemble des étapes standard (compilation, tests unitaires, construction, installation, etc. …) Je ne rentrerai pas trop dans le détail, vous invitant à <a hreflang="fr" href="http://dcabasson.developpez.com/articles/java/maven/introduction-maven2/">consulter l’article très détaillé sur maven 2 depuis le site développez.com</a>. L’élément à bien retenir ici est le fichier de description de votre projet : le <strong>pom.xml</strong>. C’est dans ce fichier que l’ensemble des déclarations sera fait. Pour lancer maven, il vous suffit d’appeler un « but » (ou goal en anglais). Le lancer via maven consiste à dire que vous souhaitez atteindre ce but (cet objectif). Par exemple, la commande <strong>mvn compile</strong> indique que vous souhaitez compiler votre projet.</p>
<h5>Les dépendances</h5>
<p>L’un des éléments à retenir consiste en la gestion des dépendances d’un projet proposée avec une gestion de la résolution des dépendances induites : concrètement, il suffit d’indiquer que votre projet compte la librairie struts en version 1.3.0 dans ses dépendances, et maven ajoutera automatiquement les autres librairies nécessaires au bon fonctionnement de struts, gérant au passage tout conflit potentiel avec d’autres dépendances. Pour les Linuxiens, ce système est tout à fait similaire au fonctionnement de <a hreflang="fr" href="http://www.debian.org/doc/manuals/apt-howto/ch1.fr.html">APT</a> (Debian, Ubuntu) ou <a hreflang="en" href="http://fedoraproject.org/wiki/Tools/yum">YUM</a> (Red Hat, Fedora). La communauté Maven 2 maintient donc un <a hreflang="en" href="http://repo1.maven.org/maven2/">repository public</a> qui référence l’ensemble des librairies disponibles à l’ajout. Lors d’une compilation, l’outil rapatrie localement les JAR et les place dans un répertoire structuré de la même manière que ce repository distant, vous permettant – ce point est essentiel – d’ajouter vos propres librairies.</p>
<h5>Les plugins</h5>
<p>Pour rester extensible (c’est dans l’ère du temps), maven 2 gère des plugins. On compte notamment parmi eux le plugin « eclipse » générant les fichiers .classpath et .project utilisé par l’IDE au moment de la compilation. Une partie dédiée au WTP est également en place pour gérer le déploiement d’une webapp sur le serveur applicatif déclaré via ce dernier. Maven dispose d’un « repository de plugins » (URL Internet) dans lequel il va aller chercher toute déclaration de plugin faite dans votre fichier <strong>pom.xml</strong>. Par exemple, si vous déclarez l’utilisation du plugin WTP (section &lt;build&gt;), maven va télécharger le plugin en question et l’appliquera à votre projet.</p>
<h5>Conclusion</h5>
<p>A partir de ces différents constats, il devient intéressant de gérer l’ensemble du processus de déploiement d’un projet à l’aide de maven 2, pour éviter d’utiliser trop d’outils différents concernant les tâches connexes à vos développements.</p>
<h4>Quand Flex rentre en action</h4>
<h5>Pourquoi maven 2 pour Flex ?</h5>
<p>Maven va donc compiler la partie Java, lancer d’éventuels tests unitaires, mais dans un projet Flex, il faudra au préalable que les .as et .mxml aient été compilés et inclus dans les bons répertoires du projet. Mais qu’en est-il si l’on gère plusieurs projets et qu’ils ont en commun des libraires SWC de composants? Pas très pratique de copier les fichiers directement en tant que ressource et risquer des erreurs de copies ou de mises à niveau lors de changements de version. Heureusement, vous n’êtes pas le seul à vous être posé la question…</p>
<h5>Le plugin Maven 2 &#8211; Flex 2</h5>
<p>L’équipe de <a hreflang="en" href="http://www.servebox.com/">ServeBox</a> propose un plugin Maven gérant la compilation et le déploiement d’applications et de librairies Flex (par le biais d’un SDK installé localement). Tous les détails sur ce plugin figurent à l’adresse suivante : <a hreflang="en" href="http://www.servebox.com/foundry/doku.php?id=m2f2plugin">Plugin Flex 2 pour maven sur ServeBox</a>. Pour reprendre succinctement les travaux effectués à l’heure actuelle, vous devez, en plus d’installer maven 2 :</p>
<ul>
<li>installer les artifacts (librairies) SWC du framework Flex dans votre repository local,</li>
<li>pour chaque projet :
<ul>
<li>déclarer le type de « packaging » de votre projet (SWF pour une application et SWC pour une librairie Flex),</li>
<li>déclarer le chemin vers le plugin de ServeBox (dans le repository de plugins) afin que le type de packaging SWF ou SWC soit reconnu, ainsi que les buts (goal) comme <strong>flex2:makeswc</strong>.</li>
</ul>
</li>
</ul>
<p>On peut donc tout à fait imaginer que vous installiez dans votre repository local des librairies comme <a hreflang="en" href="http://code.google.com/p/flexlib/">flex-lib</a> ou encore vos propres librairies (un framework local ou que sais-je encore), pour les utiliser comme dépendance de votre projet (au même titre qu’une dépendance Java). Un mot pose pourtant encore problème dans cette conclusion : « local ». Eh oui, vous êtes sur votre machine et ne partagez pas votre installation avec votre entourage.</p>
<h5>Comment ajouter des librairies dans un repository partagé par un groupe de travail ?</h5>
<p>Le problème se posait déjà dans le monde Java : il n’est pas rare qu’un projet dépende de librairies n’appartenant pas au monde libre (oracle, …) et le système (très appréciable) de gestion de dépendances de maven 2 à tendance à donner des idées pour mutualiser les développements. Une réponse existe sous le nom de <a hreflang="en" href="http://proximity.abstracthorizon.org/">Proximity</a>. Comme vous le verrez peut-être en suivant ce lien, Proximity est un proxy pour maven. En répliquant les dépendances demandées lors d’une exécution de maven, son intérêt est multiple :</p>
<ul>
<li>réduire les temps de rapatriement de manière générale,</li>
<li>répondre en cas d’indisponibilités ponctuelles du repository public de maven 2,</li>
<li>ajouter des librairies dans des repository personnalisés fonctionnant comme le repository public de maven 2.</li>
</ul>
<p>Selon votre organisation, vous pouvez tout à fait installer une instance de proximity pour y créer un repository personnalisé, et ainsi mutualiser vos propres librairies.</p>
<p>J’espère que cette approche générale sur le sujet vous donnera l’envie d’aller un peu plus loin. La prochaine fois, j’entrerai sur un cas pratique d’une application Flex développée sous eclipse WTP à l’aide de maven 2.</p>
<p>A bientôt !Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/11/15/266-debuguer-un-projet-flex-distant-via-flex-builder/" rel="bookmark" title="15 novembre 2007">L&#8217;erreur est humaine&#8230; debuguer un projet Flex distant via Flex Builder</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/02/04/299-un-projet-java-flex-avec-maven-2/" rel="bookmark" title="4 février 2008">Un projet Java / Flex avec Maven 2</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/06/11/1174-flashbuildereclipse-installation-guide-subclipse-pdt-wtp-and-maven/" rel="bookmark" title="11 juin 2009">FlashBuilder/Eclipse : installation guide &#8211; subclipse, PDT, WTP and Maven</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/08/20/2167-air-2-appeler-un-jar-executable-via-un-nativeprocess/" rel="bookmark" title="20 août 2010">AIR 2 : appeler un JAR exécutable via un NativeProcess</a></li>
</ul>
<p><!-- Similar Posts took 14.068 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2007/10/14/254-maven-2-flex-2-une-synergie-possible/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

