[
https://jira.codehaus.org/browse/MNG-4391?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=296553#comment-296553
]
Sören Chittka commented on MNG-4391:
-
+1 for having this in 3.1
I really like the syntax suggested above. It makes clear what is intended. If
this is to much 'smoke-and-mirrors' a decent IDE can make visible what is going
on.
DependencyManagement should allow replaceWith to manage use of re-named,
woven, instrumented or compatible artifacts
--
Key: MNG-4391
URL: https://jira.codehaus.org/browse/MNG-4391
Project: Maven 2 3
Issue Type: Improvement
Components: Dependencies
Affects Versions: 2.2.1
Reporter: Neale
Fix For: Issues to be reviewed for 3.x
[if only this was a later version of JIRA I'd have not lost all of what I
just typed, as I could use Mylyn instead of the web UI. here goes again...]
The challenge of using a different artifact instead of the one that is
specified in a POM that you are consuming is not an easy one.
Examples where this hits uses is:
- the artifact name and packaging changes that Spring made at 2.5.6A (which
was a big improvement)
- wanting to use SLF4J instead of Apache commons logging (i.e. use something
that provides the same API, but is an entirely different project)
- wanting to use your own derivation of a public artifact
- wanting to use a woven/instrumented version of a public artifact
The current approach to replacing, say org.springframework : spring-beans
with org.springframework : org.springframework.beans is to do ('scuse the
shorthand):
{code:xml}
dependencyManagement
dependencies
dependency
groupIdcom.sun.jersey.contribs/groupId
artifactIdjersey-spring/artifactId
exclusions
org.springframework : spring-beans
/exclusions
/dependency
... repeat for every artifact that uses spring-beans, and then add more
if adding another artifact
/dependencies
/dependencyManagement
{code}
to exclude it, and then globally include the replacement using:
{code:xml}
dependencies
dependency
groupIdorg.springframework/groupId
artifactidorg.springframework.beans/groupId
version${spring.version}/version
/dependency
/dependencies
{code}
This is error prone, and could be made far easier by an extension to
dependencies, which would remove the need to know what artifacts
(jersey-spring in the above example) use the artifact that you are replacing.
Here's how it would look:
{code:xml}
dependencyManagement
!-- this declares the version we want to use if this artifact is in use --
dependencies
dependency
groupIdorg.springframework/groupId
artifactidorg.springframework.beans/groupId
version${spring.version}/version
/dependency
!-- This deals with artifact name change --
dependency
groupIdorg.springframework/groupId
artifactidspring-beans/groupId
replaceWith !-- list of dependency elements --
dependency
groupIdorg.springframework/groupId
artifactidorg.springframework.beans/groupId
/dependency
!-- more dependency elements could be added here if an artifact
has been split --
/replaceWith
/dependency
/dependencies
{code}
NOTE:
- Nothing is specified in dependencies so no artifacts are globally added
where they may not be needed. This means we can develop a project wide
parent pom.xml.
- Artifacts can have been split and merged
- Derived artifacts, such as instrumented ones can easily be substituted, and
could be selectively substituted using profiles.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira