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

Reply via email to