<div>Hi everyone,</div>
<div> </div>
<div>For those interested in the Maven Erlang plugin I'm working on, I'm pleased to announce that the project is up and running at sourceforge (<font color="#0000cc"><a href="http://maven-erlang.sourceforge.net">http://</a>
</font>maven-erlang.sourceforge.net). Please bear in mind that the documentation is still very incomplete. I haven't decided on the licence yet (I know, it's bad...) but I guess it'll be LGPL, Apache or BSD.</div>
<div> </div>
<div>Current features:</div>
<div>- project setup (via the erlang-archetype plugin)</div>
<div>- project compilation</div>
<div>- compile and run test cases (implemented in the project lifecycle : tests will always be run when you package or deploy your project, for instance)</div>
<div>- project packaging (OTP style and zipped, including documentation with edoc)</div>
<div>- project deployment (via SCP, WebDAV, file copy, etc.)</div>
<div> </div>
<div>Plugin Installation: via SVN only for the moment. If you have maven installed, just type "mvn install" in both the plugins directories (erlang-plugin and erlang-archetype)<br> </div>
<div>Documentation (still very basic): <a href="http://maven-erlang.sourceforge.net/erlang-plugin/how-to.html">http://maven-erlang.sourceforge.net/erlang-plugin/how-to.html</a></div>
<div> </div>
<div>A word about test cases:</div>
<div>With JUnit, unit tests are separated from the rest of the code (in their own classes, obviously), and Maven mainains a separation between the corresponding .java files (src/test/java) from the rest of the code (src/main/java)
</div>
<div>I wanted to recreate this in Erlang as I don't like to put test code in my modules. So I came up with this:</div>
<div> </div>
<div>- during the "compile" phase, Maven-Erlang generates a "normal" Emakefile for the main .erl files then calls "erl -make"</div>
<div> </div>
<div>- after that, during the "test" phase, Maven-Erlang generates another Emakefile, which also compiles the test files (and adds the correct include paths). It also adds the compile_all flag. Basically, it lets you put all your test code in separate modules (and test every single function if you choose to). Finally, Maven-Erlang calls the test/0 function for every module ending with the "_test" suffix (the suffix can be changed in the POM file).
</div>
<div> </div>
<div>I'd very much like your opinion on this design choice :) I think it works nicely with EUnit 2.</div>
<div> </div>
<div>Future features should include Erlang specific report generations and automatic deployment on an erlang node (including setting up the node if needed). I've also started to look into erlrt for transitive dependency management.
</div>
<div> </div>
<div>Thanks for your feedback</div>
<div> </div>
<div> </div>
<div>Olivier</div>
<div> </div>
<div> </div>
<div><span class="gmail_quote">On 9/12/06, <b class="gmail_sendername">Olivier Sambourg</b> <<a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:olivier.sambourg@gmail.com" target="_blank">olivier.sambourg@gmail.com
</a>> wrote:</span> 
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div><span class="gmail_quote">2006/9/11, Arnaud Bailly <<a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:abailly@oqube.com" target="_blank">abailly@oqube.com</a>>:</span> <span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Chandru <<a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:chandrashekhar.mullaparthi@gmail.com" target="_blank">
 chandrashekhar.mullaparthi@gmail.com</a> > writes:<br><br>>><br>><br>> I don't know anything about <span name="st">Maven</span>, but maybe you can use the OTP structure<br>> for your system installation and the "mavenish" structure for your code 
<br>> repository? <br><br>I agree. The OTP structure could be constructed from the <span name="st">maven</span><br>standard layout using assembly plugin or even a custom artefact<br>type. For simplicity's and consistency's sake, it is better to keep 
<br>adhering to <span name="st">maven</span>'s structure. </blockquote>
<div> </div></span>
<div>I also agree (it does seem obvious now...)</div><br> </div><span class="gmail_quote">2006/9/11, Vance Shipley <<a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:vances@motivity.ca" target="_blank">
 vances@motivity.ca</a>>:</span> 
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><span>On 10/09/06, Olivier Sambourg <<a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:olivier.sambourg@gmail.com" target="_blank">
 olivier.sambourg@gmail.com</a> > wrote:<br>><br>>If we take a look at various OTP applications, the common directory<br>>structure seems to be :<br>><br>>application/<br>>|-> src/ (source files, flat) 
<br>>|-> include/ (include files...) <br>>|-> doc/ (documentation)<br>>|-> ebin/ (beam files)<br><br></span><span>The convention in OTP when mixing languages is to have a "c_src"<br>directory.  For example: 
<br><br>  $ ls lib/<span name="st">erlang</span>/lib/asn1-<a onclick="return top.js.OpenExtLink(window,event,this)" href="http://1.4.4.10/" target="_blank"> 1.4.4.10</a><br>  c_src     ebin      examples  priv      src <br>
<br>In this case there is a ddll driver and the C source is in c_src.<br>The library with the driver code is in:<br><br>  lib/<span name="st">erlang</span>/lib/asn1-<a onclick="return top.js.OpenExtLink(window,event,this)" href="http://1.4.4.10/priv/lib/asn1_erl_drv.so" target="_blank">
 1.4.4.10/priv/lib/asn1_erl_drv.so</a><br><br>Another example is the IC application which uses java:<br><br>  $ ls lib/<span name="st">erlang</span>/lib/ic-4.2.11<br>  c_src     ebin      examples  include   java_src  priv      src 
<br></span></blockquote>
<div><br>Thank you for the information :)</div>
<div> </div>
<div> </div>
<div>I've started working on the plugin, slowly at first as I'm still struggling with <span name="st">Maven</span>'s documentation... For the moment, it's capable of generating an Emakefile with various user defined options and use it to compile the source files. Quite dull actually :) 
</div>
<div>Next step will be packaging, automatically running test cases and generating the edoc (not necessarily in this order). Then there'll be dynamic code loading (Cargo really seems a good idea...) and dependencies management (REPOS is still my only lead). 
</div>
<div> </div>
<div>I've also started an archetype plugin (a special breed of <span name="st">maven</span> plugins used to set up a typical project, such as web apps, j2ee, etc.). It creates the project directory structure, along with exemple sources files and a basic POM file, so you can start coding right away... 
</div>
<div> </div>
<div>I'll let you know when I make significant progress.</div>
<div> </div>
<div>Thanks for the help</div>
<div> </div>
<div> </div>
<div>--</div><span>
<div>Olivier</div></span></blockquote></div><br>