maven-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stephen Connolly <>
Subject Re: Does each maven goal have it's own classpath?
Date Tue, 13 Aug 2013 14:34:34 GMT
Ok, here is the mindf?ck...

The strict answer to your exact question as worded (not the one you are
trying to ask) is:

yes, each mojo (a.k.a. plugin goal) invoked gets it's own classpath
consisting of the core Maven classpath plus the dependencies of the plugin
that declares the mojo.

But that is not the answer to the question you think you asked...

Each mojo can request the list of dependencies of the project and can
filter those dependencies based on the specified scopes of those

So a mojo can say, give me the list of dependencies and filter out so that
only those that make sense for the scope=runtime are retained.

The mojo can then construct a classpath from that list of dependencies.

Now one issue that a mojo may encounter is that the dependencies in the
list may not be resolved yet. This is usually addressed by the mojo being
flagged as requiring dependency resolution. It will usually include a
scope. A mojo may say it requires dependency resolution of scope = compile
but at runtime take the list of dependencies that are filtered with scope =
runtime. This could lead to issues if the mojo is not coded to take
additional defensive measures... by and large, mojo authors do not want to
take that responsibility on themselves, so typically
requiresDependencyResolution is a strong indicator of the scope that the
mojo is interested in.

As there are only 4 main scopes (we will ignore `system` and `import`)
there are thus at most 4 distinct classpaths that a mojo can construct
(without taking additional information from the mojo configuration into
account)... so for mojo's designed to operate on Java projects, there are
effectively at most 4 classpaths that a mojo can pick from... so that would
be a semi-qualified no to the answer you think you were asking.

Hopefully the above will lead you to ask some more questions of yourself
and get you towards enlightenment


On 13 August 2013 15:19, TenLeftFingers <> wrote:

> Reading the Sonatype tutorial at
> I see this:
>   Maven also provides for different dependency scopes. The simple project’s
> pom.xml contains a single
>   dependency—junit:junit:jar:3.8.1+—with a scope of +test. When a
> dependency
> has a scope of test, it will
>   not   be available to the compile goal of the Compiler plugin. It will be
> added to the classpath for only the
>   compiler:testCompile and surefire:test goals.
> This implies that each plugin goal can have it's own classpath. Is this
> correct?
> Thanks & regards,
> Jarlath
> --
> View this message in context:
> Sent from the Maven - Users mailing list archive at
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> For additional commands, e-mail:

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message