Thinking out loud... perhaps something like

<project modelVersion="5.0.0" [groupId="..."] artifactId="..."
[version="..."] packaging="...">
  [<parent groupId="..." artifactId="..." [version="..."]
[relativePath="...']/>

  [<mixin groupId="..." artifactId="..." [version="..."]/>]
  [<mixin groupId="..." artifactId="..." [version="..."]/>]
  ...
  [<mixin groupId="..." artifactId="..." [version="..."]/>]

  [<lifecycle id="..." mode="override|inherit">
    <phase id="..." [after="..." | before="..."]/>
    <phase id="..." [after="..." | before="..."]/>
    ...
    <phase id="..." [after="..." | before="..."]/>
  </lifecycle>]
  [<lifecycle id="...">
    ...
  </lifecycle>]
  ...
  [<lifecycle id="...">
    ...
  </lifecycle>]

  [<scope id="compile" [mode="override|inherit"]>
    <dependency groupId="..." artifactId="..." [platformId="..."]
version="..." [classifier="..."] type="..."/> <!-- type is mandatory-->
    <dependency groupId="..." artifactId="..." [platformId="..."]
version="..." [classifier="..."] type="..."/>
    ...
    <dependency groupId="..." artifactId="..." [platformId="..."]
version="..." [classifier="..."] type="..."/>
  </scope>]
  [<scope id="...">
    ...
  </scope>]
  ...
  [<scope id="...">
    ...
  </scope>]

  [<plugins [mode="override|inherit"]>
    <!-- this is what pluginManagement was -->
  </plugins>]

  [<bindings [mode="override|inherit"]>
    <!-- this is what plugins was, we make explicit here that this is the
binding of executions into the lifecycles -->
  </bindings>]

  [<platform id="..." [mode="override|inherit"]>
    <activation>
      <!-- define how we determine that this platform can be built in the
current environment -->
    </activation>
    <!-- allow platform specific mixins -->
    [<mixin groupId="..." artifactId="..." [version="..."]/>]
    <!-- allow platform specific lifecycles -->
    [<lifecycle id="...">
      ...
    </lifecycle>]
    <!-- allow platform specific dependencies -->
    [<scope>
      ...
    </scope>]
    <!-- allow platform specific bindings... but plugin management is from
the root only -->
    [<bindings>
      ...
    </bindings>]

    <!-- allow most of the other root tags except platform and packaging
and deployment config -->
  </platform>]
  [<platform id="...">
    ...
  </platform>]
  ...
  [<platform id="...">
    ...
  </platform>]

  <!-- packaging is only allowed in poms with an id of "parent" or "mixin".
It allows a parent/mixin to be used by different packaging ids and define
specialized defaults -->
  [<packaging id="...">
    [<mixin groupId="..." artifactId="..." [version="..."]/>]
    <!-- allow platform specific lifecycles -->
    [<lifecycle id="...">
      ...
    </lifecycle>]
    <!-- allow platform specific dependencies -->
    [<scope>
      ...
    </scope>]
    <!-- allow platform specific bindings... but plugin management is from
the root only -->
    [<bindings>
      ...
    </bindings>]
    <!-- allow most of the other root tags except platform and packaging
and deployment config -->
  </packaging>]
  [<packaging id="...">
    ...
  </packaging>]
  ...
  [<packaging id="...">
    ...
  </packaging>]

  <!-- unsure if we still need profiles -->
  <!-- perhaps we still need properties -->
  <!-- TBD deployment config, repositories, etc -->

</project>


Most of the above is just a note for myself based on thoughts I had while
going for a walk... but it may inspire others to think about this topic too

-Stephen


On 15 October 2016 at 14:34, Stephen Connolly <
stephen.alan.conno...@gmail.com> wrote:

>
>
> Sent from my iPhone
>
> > On 15 Oct 2016, at 14:20, Stephen Connolly <stephen.alan.connolly@gmail.
> com> wrote:
> >
> > So now that I have a spec for the PDTs drafted, I have been thinking of
> how that could influence Maven 5. Some things that came to mind, in no
> particular order:
> >
> > * scope becomes a build time only concern. Thus we can let users define
> custom scopes in their pom. If we let plugin executions declare scopes to
> resolve, we no longer need a compiler:testCompile goal as you can just have
> a second default execution of compiler:compile with different required
> scopes and different default configuration... bonus win, I can now add many
> different layers of test-compilation for integration tests, etc... each
> pulling in different scopes... ditto for surefire/failsafe... yeah
> integration tests
> >
> > * we should let the user define lifecycles directly in the Pom (ok,
> maybe we don't *encourage it*)
> >
> > * mixins can be properly considered... they only affect build time anyway
>
> Mixins should get their own packaging type
>
> >
> > * Pom doesn't need to be XML any more... (maybe we want to keep XML
> though... just a less verbose form)
> >
> > * does Maven 5 build Maven 2/3 projects?
>
> We may want to keep XML but move to attributes... in which case it would
> be super awesome if Maven 3.4.x didn't see project/modelVersion then it
> should check for same as attribute and then say: you need a newer Maven to
> build/inherit this
>
> >
> > Sent from my iPhone
>

Reply via email to