I wish to install a Maven extension - Takari's Concurrent Safe Local
Repository extension (
http://takari.io/book/30-team-maven.html#concurrent-safe-local-repository )
- on a system such that it's picked up by all Maven runs.

Individual projects should not have to put it in their pom.xml; I do not
want projects to be able to opt-out of this extension, and I do not want
them to have to opt-in.
Individual projects should not have to put it in their
basedir/.mvn/extensions.xml; I do not want projects to be able to opt-out
of this extension, and I do not want them to have to opt-in.

However...

This is a CICD system where builds run in Docker containers, and each get
their *own* ~/.m2 directory (complete with their own self-specified
settings.xml), which the builds themselves set up *if they need it* at
build-time. So, there isn't a ~/.m2/lib/ext that I can drop the extension
JAR into "ahead-of-time" before Maven runs - to put it there, I'd have to
modify each project's pipeline to drop the JAR in before kicking off any
Maven processes.

I am looking for a way to provide the extension as default functionality
for *all* Maven processes on a system, without requiring an individual
"maven project in a git repo" to be aware of it.

I am not entirely sure I understand how the final Extension
mechanism, -Dmaven.ext.class.path, works. It *seems like* I could add that
via environment variables as a global maven option, and point at a JAR
somewhere *else *on the system. However, the documentation I could find on
it cautions:

-Dmaven.ext.class.path=[path to files] is a little bit more flexible, but
remains not configured into the build, which is not suitable to ensure an
extension is available at build time.
-- https://maven.apache.org/studies/extension-demo/


What does "not configured into the build, which is not suitable to ensure
an extension is available at build time" *mean* ? Is it just saying that
it's not loaded before the project is parsed and so is unsuitable for
extensions that require that, as identified in the line about pom.xml
extension configuration? All documentation I can find about
-Dmaven.ext.class.path talks about EventSpy implementations - does it
*only* work
for those? Or can I load other extensions via that mechanism?

If -Dmaven.ext.class.path works with all extension types *and* loads
in-time for Takari's extension, I can probably use that.

If not, is there a way to change the Maven extension directory with a
property? E.g. mvn -Dext.dir=/opt/some/dir and have that used, instead of
the user-local ~/.m2/lib/ext?

Thank you for your time,
  Austin

Reply via email to