Questions are at the bottom.

==================================
Summary:

I am considering trying to build a rather large multiproject maven
build in a distributed fashion.  I am looking for guidance on how to
best achieve this with a minimal amount of effort.  In particular I am
looking for where to hook into the maven reactor during a multiproject
build.

==================================
Anticipated Design:

My anticipated approach is the following:
1) Share out the work directory on each developer's MS Windows based
workstation.

2) Build a simple JavaSpaces service that invokes an arbitrary maven
goal in a specified remote  directory. The entity placed on the
JavaSpace by a developer's build will identify the developer's
machine, the developer's work directory, and the maven target to
invoke.  The JavaSpace's service will either use it's own copy of
maven or it will leverage a copy of maven in the developer's work
directory in a known location.  When the service completes running the
maven target it will report its completion (including success/failure
information) by placing an appropriate entity on the JavaSpace.

The JavaSpaces service would be installed on a handful of cheap PC's
dedicated to distributed maven builds.

3) Build an appropriate maven plugin that communicates with the
JavaSpaces service.  This plugin should leverage maven's existing
multiproject functionality in order to understand the inter-project
dependencies.  It is hope this can be done with minimal effort.

==================================
Notes:

1) I am only concerned with building projects in parallel.  There is
no need to complicate the design by supporting distributed builds
within a project.

2) The developer's interaction with the distributed build should be
through maven.  The usage should be similar to that of using the
multiproject plugin.  The only difference is the multiproject-distrib
plugin would actually be farming work out to the build boxes.

3) It is expected the CPU and memory resources of the build servers
will be the greatest performance bottleneck and the disk I/O of the
developer's workstation will not initially be a problem.  When/if disk
I/O becomes a problem the work directory can be kept in sync with a
few remote copies.

4) Current build time is dominated by JUnit tests not compilation. 
There may be some value in compiling first and running tests second. 
This will help parallelize the most time consuming portion of the
build.  (Performance issues with JUnit tests are a nice problem to
have.)

5) The design chosen should be very simple to build and maintain.  The
only reason I'm interested in solving this problem is the build cycle
has become painfully slow (15min or more) and is affecting agility.  I
don't want to get sucked into build management, I just want the builds
to go faster.  Complete builds under 1 or 2 minutes would make me very
happy.  A continuous integration environment can make snapshots
available, but thats still not quite the same as running all the junit
tests across all the projects.  (Although it would be better than 15
minute builds.)

==================================
Relevant knowledge:

1) I have lots of experience writing custom Ant tasks.

2) Very little development experience with maven plugins, but work
with people who have written several.  (i.e. I don't really know Jelly
well.)

3) Don't know much about JavaSpaces, but the examples look pretty
simple.  As my problem is fairly simple I can probably do what I need
without getting into the nitty gritty of JINI.  It looks like
JavaSpaces is simple but learning JINI well is like learning EJBs
well.  It does seem that a Linda engine is the easiest way to solve my
problem.

==================================
Questions:

1) Where do I hook into maven:reactor to figure out the build
dependencies?  Where is the documentation for the maven:reactor goal? 
Where is the file that tells me what java classes are associated with
the maven:reactor goal?.

2) Is there any open-source project (maven plugin) out there that has
already solved this problem?  So far I havn't been able to find
anything close other than rant and AntSpaces
(http://www.oopsconsultancy.com/software/antspaces/).

3) If I can't find dedicated build boxes, I need to have the JavaSpace
service only run when a PC has it's screen locked.  Any
recommendations here?  I can't even think of how I can figure this out
inside of a Java application.  Such low level system information isn't
typically exposed to Java.  Maybe someone has already written
something that takes care of the problem for me.  Could use guidance
here.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to