Am 2021-08-06 um 17:55 schrieb Enno Thieleke:
Hello,
I've been using Maven for 10+ years now. It's great and I still prefer it over similar
tools. Recently I encountered a scenario where it would have been nice to be able to
simply "override" a dependency. For example by specifying _somehow_ that (in my
case) commons-logging should be jcl-over-slf4j in the entire dependency graph of my
project.
Now you might think: "That is what exclusions are for". And I agree to some
extent. But if I exclude a dependency (maybe just once, maybe many times) and add a
dependency to my project to replace what I have excluded, this newly added dependency
violates the convention of only having (direct) dependencies you want to program against.
But in this case, it is not my intent to use commons-logging and since it is not used in
my code, some other developer or plug-in might consider it redundant or obsolete.
I encountered other dependencies I'd like to override too. Generally speaking:
Whenever some artifact needs to be replaced by a different one, which has a
different groupId or artifactId, overrides might come in handy. Consider the
artifactId jboss-jaxrs-api_2.0_spec and its newer version
jboss-jaxrs-api_2.1_spec. It has version information encoded into it. This is
an issue the Maven resolver is not able to handle nor is it designed to handle
it.
Long story short, I've found a ticket for something like this:
https://issues.apache.org/jira/browse/MNG-4530
I also started to implement this feature (albeit differently from the suggested
approach in the ticket):
https://github.com/strohmattenverleger/maven-resolver/tree/MNG-4530
https://github.com/strohmattenverleger/maven/tree/MNG-4530 (requires the
changes I made to maven-resolver)
https://github.com/strohmattenverleger/maven-MNG-4530-example
If you find the time, please look at what I've implemented so far. In the example project
you will find the maven-dependency-plugin configured to copy the project dependencies.
I've spoken to some of my colleagues and they wanted me to also look the results of
"mvn dependency:tree" which turned out to be as expected (commons-logging has
been replaced entirely). Please keep in mind, that the feature is not finalized - it's
more of a PoC.
I would like your opinion on whether this feature would be nice to have and, if
so, if the approach is the right one. I'm open to suggestions and I'd be happy
to answer your questions. If you think this feature has what it takes to be
merged into Maven once it's finished, I'd be willing to invest more time into
it.
Hi Enno,
I think you request could be/is related to
https://issues.apache.org/jira/browse/MNG-1977.
You brought up the most common example for this: Commons Logging.
We obviously not only need global excludes, but also global overrides.
But I think global overrides can be achieved somewhat by global excludes
and a runtime dependency with a comment above. It is not as elegant as
your proposal, but would ultimately solve the problem with a different
dependency tree.
M
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
For additional commands, e-mail: dev-h...@maven.apache.org