Thanks for your input!

Baptiste MATHUS wrote:
> Didn't dig on that very subject, but IIRC, kind of. Parent 
> pom could sometime be downloaded although it *was* part of 
> the reactor.
> Being more explicit and less permissive is one of the 
> features of m3 (as is the build reproducibility for maven 
> in general).

Stephen Connolly wrote:
> IIRC another issue was that if the "parent" from the 
> reactor has a different version from the parent specified 
> in the pom, Maven 2.x just uses the one from the reactor 
> while with this fix Maven 3.x will correctly attempt to 
> download and use the specified version from the remote
> repository / local cache
> 
> I have not tested if this change allows Maven 3 to have 
> two different versions of the same GA within the one 
> reactor... but irrespective of that issue it does allow the 
> parent version to be disconnected from the version picked 
> up by "child" poms

I can't say I have tested a lot of corner cases with Maven 2, 
my experience has been that our project layout "just worked" 
with it. Thus, I can't back up any statement that Maven 2 had
a perfect implementation of parent/reactor handling, so this 
is not what I am saying.

But from what has been mentioned so far in this thread, it
seems the problems at hand were more about Maven 2 bugs
rather than a mathematically indeterministic project 
dependency model. Please correct me if I missed something
pointing to this in your previous comments.

The mental contract I perceived Maven 2 was promising was
  "related modules found by the reactor in your local 
  checkout will take precedence over modules in repo"
where "related modules" means every kind of artefact 
reference using groupId/artifactId/version, including
parent poms.

I believe it is quite possible to make an algorithm that
produces deterministic builds based on this contract, while
not resorting to explicit filesystem references.
The relativePath element is for sure a way to improve
consistency when building in isolation but why not leave it
at that, instead of crippling reactor builds at the same
time?

With the current design, Maven 3's mental contract for
module references is broken, and to make it consistent it
would really require relativePath elements also on 
dependencies when it is desired to reference the local 
checkout. That would improve consistency even further when 
building in isolation, but is something I would desire just
as little as I desire this behaviour for parents.

Are there any possibilities for:
- changing Maven 3 to find parents in reactor by default
- changing Maven 3 to find parents in reactor in an opt-in
  mode
- tweaking Maven ourself through settings or plugins to
  have it find parents through reactor
?

Best regards
Mike


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to