[
http://jira.codehaus.org/browse/MNG-2966?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=215621#action_215621
]
Mike Youngstrom commented on MNG-2966:
--------------------------------------
I've done some additional thinking and put together a POC patch.
In my poc patch:
* I've added a step in the model build after the DependencyManagement import
process.
* I build an effective model for each of the concrete dependencies of the root
model.
* Any of these optional DependencieManagements I add to the root model I set
optional=true to differentiate this DependencyManagement Dependency from
traditional DependencyManagement Dependencies.
I believe this approach has the following benefits:
* Allows any dependencies in the root model without versions to be resolved
along with the other DependencyManagement resolution.
* Since "optional" in a dependencyManagement dependency previously was ignored
this marker can now be used to identify which DependencyManagement dependencies
came from DependencyManagement and which came from optional transitive
dependencies.
* Since these optional DependencyManagements are added after other
DependencyManagements this should maintain 100% backwards compatibility.
The only concern I have about this approach is the polluting of the
DependencyManagement of an effective pom that is going on. So viewing an
effective pom could have a significantly larger number of dependencies in the
DependencyManagement section. Though that can be good too so the developer can
know what optional dependencies are available to them.
In my prototype I only go one level of dependencies deep. To match transitive
dependency semantics I should probably recurse through all transitive levels
maintaining the same dependency version semantics of transitive dependencies.
Any thoughts about this approach? I should have a patch ready to post for
review soon.
Mike
> 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