[ 
http://jira.codehaus.org/browse/MNG-2966?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=215334#action_215334
 ] 

Mike Youngstrom commented on MNG-2966:
--------------------------------------

I am the project lead of a large organizational "Stack" or shared library team. 
 We produce a number of modules for projects in our organization to use.  I 
would like to make these modules as independent (versionable, releaseable, etc) 
from each other as possible.  However, several of them have optional shared 
transitive dependencies that I need to be able to manage the version of.

To manage these versions we currently provide an organizational master pom that 
include dependencyManagement definitions for all the versions of all the 
dependencies our modules have.  This works great, however, it destroys the 
independence of our modules by coupling to a single artifact (the master pom).  
If I need to upgrade an optional transitive dependency of module A I also need 
to upgrade the version in our master pom and release a new version of both.  If 
I wish to release a patch of an older module that needs an upgraded transitive 
dependency then all heck breaks.  This coupling of our projects to a master pom 
greatly reduces the independence of our modules.  Yet not providing a master 
pom gives us no control over the versioning of any optional transitive 
dependencies our poms may have.

In one attempt to solve this I attempted to use the new "imported poms" 
feature.  I created a "BOM" pom for each module.  However, the version 
resolution algorithm when using imported poms broke down because of MNG-4132.  
Plus it was very ugly maintaining a BOM pom and a Jar pom for each of our 
modules.

This solution perfectly fixes my problem.  I was specifically thinking of the 
blank version approach but it appears Benjamin likes the inclusions approach.  
Would a patch for this issue at all improve its chances of making it into 3.0 
final?  I would be happy to code up a patch if I could get a bit of an 
endorsement for this feature from the Maven team.

> Use optional transitive dependencies versions as dependencyManagement does
> --------------------------------------------------------------------------
>
>                 Key: MNG-2966
>                 URL: http://jira.codehaus.org/browse/MNG-2966
>             Project: Maven 2 & 3
>          Issue Type: Improvement
>          Components: Dependencies
>    Affects Versions: 2.0.6
>            Reporter: Daniel Beland
>             Fix For: 3.x (to be reviewed)
>
>
> I would like to be able to add an includes statement on a dependency to get 
> its optional dependency(ies).
> ie:
>     <dependency>
>       <groupId>hibernate</groupId>
>       <artifactId>hibernate</artifactId>
>       <version>3.2.1.ga</version>
>       <inclusions>
>         <inclusion>
>           <groupId>jgroups</groupId>
>           <artifactId>jgroups-all</artifactId>
>           <scope>runtime</scope>
>           <optional>false</optional>
>         </inclusion>
>       </inclusions>
>     </dependency>
>  For example, I use hibernate 3.2.1.ga, it has an optional dependency on 
> jgroups-all-2.2.8.
> I would like to be able to add an inclusion statement on the hibernate lib to 
> tell that I want to include jgroups as well. 
> The main reason for this is that I want the same version as specified in the 
> hibernate pom.
> This way, upgrading hibernate would also upgrade my version of jgroups at the 
> same time.
> Obviously, we need to be able to define a scope and optional attribute as 
> well (not inherited)
> Or maybe we could set the dependency explicitly in the pom without specifying 
> the version and have maven resolve the version from the nearest source (as it 
> does normally) automatically or we specify where to resolve it.
> ie something like:
>     <dependency>
>       <groupId>jgroups</groupId>
>       <artifactId>jgroups-all</artifactId>
>       <! -- either maven resolves the version from the nearest source 
> automatically or we need to tell maven where to find it -->
>       <versionLookup>
>         <groupId>hibernate</groupId>
>         <artifactId>hibernate</artifactId>
>         <!-- maven will resolve the version from the hibernate pom as long as 
> hibernate is already a dependency of my project (no version needed)
>                or we specify which version from a property (to have it 
> defined only once in the pom) -->
>         <version>${hibernate.version}</version>
>       </versionLookup>
>       <scope>runtime</scope>
>       <optional>false</optional>
>     </dependency>

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to