[ 
https://issues.apache.org/jira/browse/MNG-6142?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Elliotte Rusty Harold reassigned MNG-6142:
------------------------------------------

    Assignee: Elliotte Rusty Harold

> Support for additional <variant> coordinate to identify branches, editions, 
> private builds, etc.
> ------------------------------------------------------------------------------------------------
>
>                 Key: MNG-6142
>                 URL: https://issues.apache.org/jira/browse/MNG-6142
>             Project: Maven
>          Issue Type: Wish
>          Components: core
>            Reporter: Markus Karg
>            Assignee: Elliotte Rusty Harold
>            Priority: Major
>
> Often development teams work on parallel variants (a.k.a branches) ontop of 
> the same base version. Maven currently has no support for such scenarios, 
> which is problematic, as the following example describes:
> A team of three developers just released version "1.0.0" of a library, which 
> is used by a larger application. The version was now set to 1.1.0-SNAPSHOT 
> for the master branch, and 1.0.1-SNAPSHOT for the Long-Term-Support branch. 
> Now in that team, programmer A started to work on feature A. In the same 
> team, programmer B started to work on feature B, which is concurrent (!) to 
> feature A. The team lead, programmer C, will later decide which (!) of both 
> features (A _or_ B) he wants to get in the final release 1.0.0. To try out 
> each of the features, he sets 1.1.0-SNAPSHOT as the dependency version in his 
> test application, to pull in the latest version of the library. The problem 
> is: How (by means of POM coordinates) to decide which proposed feature to 
> pull, A or B?
> Similar scenarios often happen whilst the development of large systems. There 
> is no real solution here, as group, artifact, and version are the same for 
> all variants of the next development iteration, but only the _variant_ (a.k.a 
> "branch") of the artifact is different.
> Why not simply reusing the existing coordinatest?
> - groupdId: A variant is a different timeline within an artifact, so changing 
> the group is irrational.
> - artifactId: Variants are, just like versions, changes _of_ artifacts, not 
> _different_ artifacts. Certainly, this is the most rational workaround.
> - version: Existing tools depend on the major.minor.build-qualifier schema, 
> and rely upon semantic interpretation that qualifiers are _sorted_, so 
> feature A would become "older" than feature "B", which is completely weird, 
> as both have the same age.
> - classifier: Classifiers are needed in addition to variants, for example 
> both A and B shall publish javadoc and sources, so this would break existing 
> features.
> To sum up, using the existing coordinates implies major drawbacks or even 
> breaks existing features. Also, it is counterintuitive, as a variant implies 
> a separate timeline, neither a new group or artifact, nor a sequence on one 
> shared same timeline.
> Hence, to improve actual current workflow scenarios, I'd like to propose the 
> addition of an optional <variant> coordinate. The interpretation should be 
> like this:
> * <variant> is optional.
> * <variant>, if existing, is added to the default file name between 
> <artifactId> and <version> (e. g. mylib-featureB-1.0.0-SNAPSHOT-javadoc.jar).
> * <variant>, if given, implies that a dependency with variant V of artifact 
> A, will can only be satisfied with exact that coordinates, neither with 
> artifact "A-V", nor with A having no version. On the other hand, just as with 
> versions, a dependency not having a variant, is happy with _any_ variant of 
> the same artifact, unless the variant is marked as "exactly this" using 
> brackets [V].
> Adding support using these rules would allow tool / plugin vendors to greatly 
> support dealing with branches, e. g. in git and subversion, by better 
> understand dependencies on features, differences between branches, etc.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to