On Dec 16, 2006, at 5:51 AM, Jason van Zyl wrote:
The central repository itself has always been pretty stable with no
safeguards. I realize not having these safeguards is not great but
things don't just disappear off that machine. We have a huge
problem, it appears, with the syncs we are pulling in
automatically. Organization wide syncs are soon going to stop and
it's going to be per-project so that when garbage appears we will
know immediately who's polluting the repository, Archiva will also
keep track of deletions. So yes, I agree on one hand that we need a
watchdog in place but we are not randomly jumbling stuff around on
the central repository. We're getting burned from our source syncs
and the misuse of SNAPSHOT repositories for the most part.
Put the contents of central under svn, and expose the change log...
that would be a good start. That will help reduce the window of
error, though it does not completely eliminate it. If you also allow
the central repo to be pulled via svn's versioned dav protocol, then
you can also eliminate problems when an artifact is being changed...
so that when the build runs, it will always use the same rev# when
retrieving artifacts (picking whatever is the latest at the time when
its initialized and keeping that for the entire cycle).
I think that all mvn repos should behave like this actually... and if
they did I would have much less to complain about, since that would
provide a rich audit trail and atomic access to artifacts.
Only thing left would be to allow projects to add specific tags to
those artifacts on central during release time, so that at any point,
a project could always get the complete set of artifacts it needed to
build.
Another comment I will make is that I am fairly sure there are
severe bugs in the maven artifact resolution process when
snapshots are present.
There are a huge number, I believe it's completely unreliable and
it's going to need an overhaul. It was very apparent from my last
round of travels that in many cases especially when snapshots are
used there are severe problems. I think we underestimated the use
snapshots and how prevalent their use would be for external
dependencies.
Ya, maybe... I think almost everyone is using them for development,
and most people who are working with other groups to get changes made
are pulling in those snapshots.
This appears to be the recommended way to handle these types of
dependencies which change rapidly using Maven. IMO its lossy and
harmful in many cases... and that is why I prefer using source repos
to handle this, so that I can always get a snapshot of the source
code, build it and integration. I believe mvn's snapshot's are
really only a convenience for folks that don't want to build a bunch
of stuff, but are willing to live with the possibility that they are
not using the latest version of the codebase.
But, personally... and specifically for build automation, I would
much rather work directly from source code so that I was 100% sure
what was getting pulled in, and have a changelog to correlate with.
And... well, currently Maven does more to get in the way to implement
that solution than it does to help get there.
This is because if I remove all org.apache.geronimo.modules
artifacts from my local repo and build the corresponding part of
geronimo, if I build online I usually get errors together with
downloaded timestamped artifacts whereas if I build offline the
build succeeds.
Yup, that's a patch we applied for Jason to provide a stopgap
solution. Where no snapshots will be updated when building.
Ya, thanks by the way. Not sure when I will actually get to be able
to use that though... I don't think I want to recommend that anyone
use an pre-release of Maven to get around issues with the current
version.
Note carefully that I am only building geronimo artifacts and
there is no change whatsoever in non-geronimo artifacts in my
local repo. I think nearly every time we've made a change
involving more than one module since we started using m2 and
pushing snapshots to the snapshot repo we've had user complaints
that the build is broken, and the solution always is to build
offline.
Snapshots are an inherit instability but there are definitely error
in working with snapshots in maven-artifact and it's bad. I see it
as the most critical problem with 2.0.x. But moving toward using
less of them even if that's locking to some timestamped versions
will help greatly.
Timestampped versions cause enough problems by themselves... and I
don't recommend using them directly.
The thing is that... we need to have a simple mechanism to easily
pick up changes made by other dependency projects with out needing
them to make a release and/or changing our poms to pick up new bits.
It would be a PITA if everytime a change was made to OpenEJB to
support Geronimo that they had to make a release and we had to modify
poms to use a new version. That could potentially happen 3 or 4
times a day, if not more.
SNAPSHOTS here are very useful for developers who don't want to
checkout everything and build it, who are willing to assume some risk
of strange build failures due to slop.
Your complaints about any already released geronimo artifacts are
totally irrelevant unless you want to recommend we move back to
m1 since the 1.2-beta and 2.0-M1 are the first releases we've
tried to do with m2 (except for specs, which got messed up in
various other ways but have not been a giant problem until recently).
With m1 or m2 a release with snapshots is deadly. The practice
seems to be something present regardless of what version of Maven
you're using. The concept of a SNAPSHOT is the same in both
versions though implemented differently.
Even in the face of the instability with SNAPSHOT handling in m2 I
think you can eliminate a lot of it by getting off many of your
SNAPSHOTs and I am trying to get out 2.0.5 which now contains a fix
that always takes SNAPSHOTs locally if you have them.
I agree... best to limit which SNAPSHOTS are used... BUT, its really
not that easy to just go and get a project to make a release so that
you can move forward. So I think that there will always be SNAPSHOTS
used in this manner.
--jason