Oh ya... insert :-) every few lines... :-P
--jason
On Feb 23, 2007, at 2:27 AM, Jason Dillon wrote:
Folks, the local module repository thing is a massive hack, not
meant to be used as much as we are using it... and really it should
*not* have SNAPSHOT artifacts in it.
When using snaps in these local artifacts, strange artifact
resolution failures are bound to occur when Maven decides its time
to go update snaps (daily for us). This causes problems when
building a module which depends on another module which has a
module local repo that contains snapshots, since the current module
does not have access to the dependency's repo it will cause an
artifact resolution exception.
I did not check _all_ of the module local repos that we have in
server/trunk, but I know that at least in configs/jasper/repository
there are myfaces 1.2.0-SNAPSHOT artifacts. This is not really
acceptable. First, its bad enough that we have to have this repo
here in the first place (the myfaces team should just publish snaps
like all other projects) and second, these artifacts are SNAPSHOT
which causes build problems as noted above.
*If you must* use a module local repo, then *do not* put SNAPSHOT
artifacts in there... *if you must* then include the _timestamp-
build_ artifacts and configure your pom to use them, so that
dependent projects don't freak-out when mvn tries to update snaps.
* * *
I'm still working out a simply/elegant way to solve this problem of
remote repos and local repos, etc... but until I get that we need
to becareful about how we use these local repos and which remote
repos we include (I notice we still have a few legacy repos, which
are a big no-no).
David Jencks mentioned in IRC today that it might be better if we
just had one location where all of these module-local repos
artifacts are kept. IMO, the module-local repos suck... but having
one sucks less than having more than one, so I'm inclined to agree
this is a good idea for the short-term. To make this work, we
basically create another top-level module (peer to modules and
configs, etc) say named "repository" (or whatever). This module
contains the single local-module repository in m2 format, which is
only configured in that modules pom. Then the pom lists all of the
artifacts as dependencies which are in the repo to force them to
get installed into Maven's local cache.
This module is added first, before all other children in the
reactor, which will *hopefully* always get that module executed
first, those deps installed and then other modules which depend on
those custom bits will already have them resolved in the local
maven cache. It sucks... but it sucks-less IMO than handful of
repos that we have now scattered through the project tree.
I'm still working on getting a better solution to the entire remote
repo/repeatable build/blah, blah stuff... but until then I think
this is a decent step to simplify things a tiny bit more and help
reduce strange problems from popping up.
* * *
Comments? Unless there are any objections, I'll implement this in
the next day or so... BUT, still need someone to deal with the
myfaces 1.2.0-SNAPSHOT bits which really need to be fixed even if
we leave the repos asis, or move to this one single short-term
local repo.
--jason