Howdy,

usually you should consider maven build (in case maven, session == cli
invocation) as this hierarchy:
* remote repositories:
* * local repository:
* * * session

Maven will prefer things "most specific" if present:
- if is in reactor (current session), will use that
- if is in local repository (and all things like expiration etc passes)
will use that
- otherwise it goes to remote

This also implies if you want to build A and then B from _same multi module
build_ (that has let's assume modules A, B and C), ideally you
* maven install all the reactor
* maven -f A compile
etc


On Thu, Feb 15, 2024 at 9:28 PM Francois Marot <francois.ma...@gmail.com>
wrote:

> to add on Joseph answer: if you are in the B directory, then only B is in
> the reactor (more or less meaning "the list of project being built by this
> Maven invocation").
> My rule of thumb is to never do that and always run from the root. If you
> want to speedup the build and you know that only B has been modified, you
> can use maven options such as:
>
> - mvn test -pl :B         // it will only build/test the B module
> - mvn test -pl :B -am        // it will build B and all the modules B
> depends onto
> - mvn test -rf :B            // it resumes the build from B in case B's
> tests failed , so it will also build modules after B
>
> you can note that I add a semi-column before the module name because in
> case the module is a sub-module (or sub-sub-sub...module), not directly at
> the parent's root, then it is required.
> Hope this helps
>
>
> Le jeu. 15 févr. 2024 à 20:55, Joseph Leonard <
> joseph.leon...@alfasystems.com> a écrit :
>
> > Builds in the reactor are always favoured over the m2 repo because the
> > builds in the reactor will be up-to-date whereas the jar in the repo may
> be
> > out of date.
> >
> > If you run mvn compile in directory B then you will not be running a
> multi
> > module build - and therefore module A will not be in the reactor. This is
> > why the m2 repo will always be used for module A in this scenario.
> >
> > Joe
> >
> > -----Original Message-----
> > From: Siddharth Jain <siddh...@gmail.com>
> > Sent: Thursday, February 15, 2024 7:50 PM
> > To: Maven Users List <users@maven.apache.org>
> > Subject: Re: How does maven resolve inter-module dependencies in a
> > multi-module build?
> >
> > External Email: Please be vigilant and check the contents and source for
> > signs of malicious activity.
> >
> > thanks Joe. but then if classes are available both in the target
> directory
> > of module A as well as a jar file in M2 repository which takes
> precedence?
> >
> > also i have noticed that while running mvn compile from the root works,
> > running mvn compile from the directory of B does not pick up classes from
> > A's target directory. it only picks up from M2 repo in that case.
> >
> > On Thu, Feb 15, 2024 at 11:28 AM Joseph Leonard <
> > joseph.leon...@alfasystems.com> wrote:
> >
> > > Hi Sid,
> > > It will resolve the classes directory of module A that will have been
> > > populated during module A's 'compile' build.
> > > Joe
> > >
> > > On 2024/02/15 17:50:44 Siddharth Jain wrote:
> > > > Hello,
> > > >
> > > > I am working on a multi-module Maven build. e.g., I have a root
> > > > directory containing 3 sub-projects A, B, C and a parent pom defined
> > > > in the root directory. I notice that I can run mvn compile from the
> > > > root directory
> > > and
> > > > it will build the 3 projects. The projects may have
> > > > inter-dependencies e.g., B depends on A and let's say C depends on
> > both A and B.
> > > >
> > > > My question is while building B how does maven locate the compiled
> > > > code
> > > of
> > > > A (the dependency) since maven compile by itself does not install
> > > > the
> > > built
> > > > artifact into M2 repository?
> > > >
> > > > Sid
> > > >
> > >
> >
>

Reply via email to