On 1 May 07, at 5:37 PM 1 May 07, Clark, Gil W. wrote:
I know I'm getting into iffy territory here and my thoughts on this
were kind of rejected on the users list but I think that if the
version selection algorithm were to include some sort of quality
identifier it would solve some of these problems.
The idea here is that some folks are going to want "latest"
regardless of the quality of the latest while others are going to
want the latest, highest quality release of a plug-in or
component. This can be used in conjunction with a version range.
So I could say <version>[1.0-STABLE, 2.0-STABLE)</version> and I'd
only get stable releases. Or I could say <version>[1.0-WORKING,
2.0-STABLE)</version> and I'd get defaulted to STABLE as long as
there is a stable version within the numeric range or if none
exists I'd get WORKING if a version at that quality level falls in
the range. Or I could say <version>WORKING</version> if I only
want the absolute latest working version of a component - kind of
like SNAPSHOT.
This allows a POM to be targeted at a particular level of quality
while still leaving it open to select from a range of versions.
For final releases of a project good practice dictates the version
numbers be locked down for all dependencies. That does mean
modifying the POM but that seems unavoidable.
Of course, there may be multiple levels of quality like WORKING,
TESTED, FOO, RELEASE, etc. This is the way Ivy works.
Maven has the notion of pluggable version transformations. This is
the mechanism which looks at the token "SNAPSHOT" and performs the
necessary logic to examine the metadata and retrieve the last built
version. It's technically not hard to look at an arbitrary token and
perform some logic to change the version that is slotted in.
The problem here is not a technical one of allowing any token, the
problem is that what these things mean to people and the process they
go through to arrive to determine the meaning will be arbitrary.
I think what people really want here is "something that has some
functional improvements but are binary compatible with what I'm using".
What "WORKING", or "RELEASE" means vary. Especially in the case of a
release as people currently have different processes.
We have already standard testing patterns and surefire, and we are
starting to see standard release procedures so what we want to move
toward is the use of ranges which would be good but coupled with some
criteria for quality. So you would simply say I want [1.0,) which is
anything 1.0 or above that 1) is binary compatible with what I used
last time (we go and find the last release and see what version was
resolved), and 2) has the same or better coverage. This is the only
way you can deterministically be safe of picking something further
down in a range.
Who's going to assign these arbitrary labels to releases? I mean who
is doing this for Ivy? This stuff cannot be tacked on by the third
party it simply is not scalable. Maven has the social capital (the
necessary mass of users doing the same thing) to pull off these
coverage and binary compatibility standards to make this transparent.
That being said I still think people would benefit more from a daily
report produced from a build server that pulled in new versions of
dependencies that purport to work and actually run your tests. If
successful then you click a button and your POMs are upgrade. The
computer should do the crap work. We are really not that far away
from something like this.
The hardest part in all this is standardizing on these quality
levels - t
Bingo. This can only happen in a community like Maven where we have
striven for standard everything from day one because this is the only
way these types of things are possible. This will never be possible
using Ant with Ivy, it was never the goal of Ant. They might say they
can but that will require the addition of everything we already have.
Then it will be converging toward what Maven actually is. The key
difference is that Maven from day one was designed to have a complete
and holistic approach to solving problems like this.
For example right now for releases, using the profile we have
created, we require PGP signatures, javadocs, sources, and the
licenses and notice files are inserted automatically (with the
available overriding for cases where the metadata is insufficient).
As our profile spreads into common use we can then also mixin Clirr
to produce a small file indicating the level of binary compatibility,
and a file indicating coverage. Even if this was not done in the
original build we can inject those plugins for the release. How?
Because all our builds are the same. Intervention on our part, but
entirely scalable because of the common structure of our projects. I
don't think many people using Maven, let alone detractors understand
the power and utility of our model. We let the computer do what it's
good at and keep track of these bits. We will just say we want it to
work :-)
Jason.
hey can be dynamic - specified in the settings file or top level
POM...
-----Original Message-----
From: Hervé BOUTEMY [mailto:[EMAIL PROTECTED]
Sent: Tuesday, May 01, 2007 1:36 PM
To: Maven Developers List
Subject: Re: Remove auto-resolution of plugin versions from Maven 2.1
Le mardi 1 mai 2007, Tomasz Pik a écrit :
On 5/1/07, Hervé BOUTEMY <[EMAIL PROTECTED]> wrote:
Le mardi 1 mai 2007, Jerome Lacoste a écrit :
Maybe there could be an easy way to let users use the latest ?
maybe something like
mvn -L ... ( L for latest)
that would ignore all specified versions, without requiring a POM
change ? Maybe too radical.
such a LATEST option would be very usefull, not only for plugins but
for every dependencies, to do regression testing against latest
development version of everything. It would be like if Gump was
integrated into
Maven:
http://gump.apache.org/
I think we would need to differentiate plugin latest from
dependencies latest.
This LATEST thing is already in jira:
http://jira.codehaus.org/browse/MNG-2431 And I think it would be very
useful, both for plugins and for 'normal dependencies'.
not exactly:
- LATEST STABLE is not LATEST : LATEST doesn't try to differentiate
STABLE or not, just get any change to check ASAP if it breaks
something
- "mvn -L" is on the command line, not in the pom : the pom refers
to chosen versions, for normal builds, but "mvn -L" is for
continuous builds, overriding chosen versions of the pom, to check
if a dependency has an evolution that will break something. The
artifact built with "mvn -L" is not intended for use, but only as a
pro-active test against dependencies evolution
Regards,
Tomek
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED] For
additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED] For
additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]