All,

I am not sold on maven at this point.  Don't get me wrong I am a strong 
advocate of Maven, and although it has its issues, I think it can be a big 
benefit to a project.  I am just not sold that it is worth the effort at the 
moment.  That being said here are a couple ways which maven could help the wave 
in a box project:

Modularization

Maven encourages the construction of distinct modules for a project.  As the 
wave project grows, we will likely want to build a set of reusable components 
that other projects could use.  For example we may have concurrency control 
stacks, protocol stacks, interface components, etc that other projects might 
want to take advantage of.  We have already gotten request to use the editor, 
and we know people are interested in building new UI's leveraging the client 
server protocol.  With maven, the project can easily be organized such that 
these modules are reference-able and usable by others.  Things like the Robot 
and Gadget API are obvious examples.

This could be done without maven, but maven makes this the norm rather than the 
exception.


Build Time

Right now we have a pretty monolithic build.  When I change anything, I have to 
rebuild the whole project.  With maven it's fairly easy to go in to the sub 
module you are working on and make "local" changes there.  You can rebuild and 
deploy easily without having to do a whole build.  Of course you can run a full 
build if you like.


Testing

Right now we have an issue with testing.  The unit tests are also monolithic.  
Originally, they all run or they all didn't.  Unfortunately, it took too long 
to run all of them, so we now have a somewhat arbitrary distinction between 
long running and short running tests.  Only the short ones run by default.

With maven, unit tests are scoped to the module which they test.  If we had a 
Robot API module, we would have tests in that module that just unit test the 
Robot API.  If you are working on the Robot API, you can make changes and 
easily just run the Robot API unit tests.  You can actually work on the sub 
module, make changes, test and check in code, without having to run ALL the 
unit tests for the whole project, assuming the tests are comprehensive for the 
module.  The job of running all the tests can be the job of the integration 
build.


Standardization

When I was ramping up on wave, it took me over a month to become fully 
comfortable with the nested ant scripts and how the project ultimately built 
itself.  As ant projects try to become more modular, the complexity of their 
build scripts goes exponentially up.  Furthermore, each project does it 
differently.  You have to study the build to figure it out.  With maven, its 
all pretty standard.  Any developer experienced in maven can check out your 
project, rigure out the module layout and how to build any specific module they 
need within minutes.


Other Random Things

Great IDE integration.
Dependency management.
A standard mechanism to deploy our artifacts for other projects to use.
Lot's of reports that can be generated about dependancies, tests, etc.
Integration with SVN and standard mechanism to perform releases, tagging and 
branches.


In my opinion maven would help us:

Organize the project better.
Make our codebase more testable.
Shorten our development and test cycles.
Make our project more accessible to new developers.
Make our project more reusable for others.


All of that said... it's not going to be easy to switch over, so I don't take 
the decision lightly.

~Michael


On Apr 27, 2011, at 7:31 PM, Daniel Danilatos wrote:

> It seems the real problem here is the large amount of jars checked
> into the repository. What about something that just does dependency
> management, for example apache ivy?
> 
> Does maven solve any other problems we have that make it worth going
> all the way with it? I'm worried it could cause as much trouble as it
> solves. I'm not fundamentally against it but I'd like to be confident
> there are solid reasons/benefits to the waveprotocol project for
> migrating to maven.
> 
> My 2c.
> 
> Dan
> 
> Στις 27 Απριλίου 2011 7:51 π.μ., ο χρήστης Michael MacFadden
> <[email protected]> έγραψε:
>> Nelson,
>> 
>> I am all for this.  I am very experienced with Maven and the proper ways to 
>> set up multi module projects including dependency management, etc.  I think 
>> your assessment of the situation is correct.  We would ultimately need a 
>> code free to get this done.
>> 
>> However, before you go to far, I would try to get a real discussion going on 
>> if this is something the team wants to do.  If so we need to discuss what 
>> the right modules are, what artifact and group ids we would want, etc.  I 
>> would hate to see you set up a lot of poms.xml that don't line up with how 
>> we would ultimately do things.
>> 
>> As a side note, if we did want to go to maven, now would be the right time.  
>> Everything else has to be migrated anyway, might as well take the hit now.  
>> However, I would recommend that we get the current source migrated over 
>> first.
>> 
>> ~Michael
>> 
>> 
>> On Apr 26, 2011, at 10:12 AM, Nelson Silva wrote:
>> 
>>> Hi all,
>>> 
>>> There have been several discussions on adding maven as a build tool.
>>> 
>>> I've decided to start working on this by adding a tools/maven subdirectory 
>>> with a multimodule project layout.
>>> I pushed my ongoing work to a branch in my GitHub clone :
>>> 
>>> https://github.com/nelsonsilva/wave-protocol/tree/maven/tools/maven
>>> 
>>> While a complete port to maven as the main build tool would required a code 
>>> freeze and a healthy discussion of code reorganization into proper modules 
>>> we should be able to use a simple includes/excludes approach for now and in 
>>> the end, if everyone is ok with it, we could easily make the port happen.
>>> 
>>> I would like to get some help with this from everyone who's interested. 
>>> There are lots of plugins and lots of ways to acomplish things in maven so 
>>> this should get the discussion started.
>>> 
>>> I chose to go with GitHub so everyone can fork it and send me pull 
>>> requests. If you'd rather go with the issue/patchset approach I'll open the 
>>> issue but the idea here was to have several people contribute and not a 
>>> single patch + review process.
>>> 
>>> Quickstart:
>>> 
>>> cd tools/maven
>>> ./install_deps.sh # This will install a couple of dependencies that were 
>>> either patched or were not found in existing maven repos
>>> mvn install
>>> cd server
>>> ln -s ../../../war
>>> mvn exec:java # This should start the server, although you'll have to 
>>> symlink the war directory for now
>>> 
>>> TO DO:
>>> 
>>> - Use profiles for dev/prod
>>> - Remove as many ant tasks as possible and use pure maven plugins
>>> - Use the assembly plugin to package the server with the webclient
>>> - Setup the surefire tests for each module
>>> - Rethink the modules, we should have pure api modules and the several impl 
>>> modules for persistence, websockets, auth, etc ...
>>> - etc....
>>> 
>>> Looking forward to getting this going...
>>> 
>>> Regards,
>>> 
>>>    Nelson Silva
>> 
>> 

Reply via email to