Hmmm shower thinking now has me pondering if a custom DSL might be
better... something close to human friendly JSON with exceptions for
dependency declaration so that they are always specified as g:a:p:v:c:t
with the optional p and c being empty, e.g. g:a::v::t

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

> 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.conno...@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