On 23-6-2020 23:20:31, Matthieu BROUILLARD <matth...@brouillard.fr> wrote: Hi Robert,
congrats this looks like a great achievement. I presume that the consumer pom means the end of the flatten plugin or is there still some benefit in using flatten plugin? Robert Scholte: The flatten-maven-plugin was introduced when the installAtEnd/deployAtEnd was introduced and users couldn't define their own pom anymore. In the meantime it has a lot of configurable filters to manipulate the pom, not sure if everything will be possible. > dependencies that are part of the reactor don't need a version anymore What is meant here ? Is it that in a multimodule project a dependency from a module to another of the same multimodule does not need the version ? For example when having an api and impl in the same multimodule, the impl will not require the version of the api? Robert Scholte: Exactly, you don't need to specify it in the local pom, the distributed pom will be enriched with the correct version. > These are implemented steps to get from the file model to the raw model, where the required versions are added. Are those replacements still part of the pom loading by ModelProcessor? I'll give it a try especially to see the compliance with my existing core extensions. Robert Scholte: Yes, I've tried to implement it without need of changes for plugins and extensions. Matthieu Brouillard On Mon, Jun 22, 2020 at 11:18 PM Robert Scholte wrote: > Hi, > > One of my long standing wishes has made it to the master branch of Maven: > the support for build/consumer pom. > With this we can finally start improving the pom without breaking the > Maven eco system. > > Up until now the pom.xml has been distributed (installed/deployed) as is > to both local and remote repositories. > The good thing is that is it fast and there is no magic. > However, it sometimes implies adding redundant information and it also > blocks any chance of improvement for Maven > > The challenge is to make it possible to have an locally an improved > "build" pom while distributing a model 4.0.0 compatible "consumer" pom. > > The whole architecture of Maven was built upon an immutable pom.xml, so it > took a while to split this, but I managed to solve this. > And to confirm that it works, some transformations have been added for the > next Maven release > The local pom it still model 4.0.0 compatible, but some redundant elements > are not required anymore. > - in case the is located at its relativePath (default: > ../pom.xml), the version can be removed. groupId and artifactId are still > required to ensure it is being matched with the right parent. > > - dependencies that are part of the reactor don't need a version anymore > These are implemented steps to get from the file model to the raw model, > where the required versions are added. > > When distributing the pom, the previous transformations are done, but also: > - cifriendly placeholders in versions (${sha1}, ${revision}, > ${changelist}) will be resolved. > - from will be removed > - from will be removed > These cleanups are context aware, if they appear in some configuration, > they won't be touched. > One of our integration-tests[1] demonstrates how new poms in a multimodule > project might look like. > > Even though the latter steps look quite small (removing elements with > relative paths), it should give us enough feedback about the whole process. > > The status is that it is ready to be embedded in supporting tools like > IDEs. > We should give them time to work on this and share feedback. > It might require some adjustments in Maven to improve user experience. > > In the meantime we need to work on plugins that will have impact by these > changes. > Most significant is are signing maven plugins such as the > maven-gpg-plugin, which needs to work with the distributed pom instead of > the local pom. > Also all packaging plugin that can include the pom.xml and pom.properties > in their archive should switch to the distributed pom. > The maven-shade-plugin was marked as well, but at first glance this looks > fine. > In the end all our plugins must be verified, just to be sure. > So there's enough to work on. > > In general I avoid giving timelines about how fast a new release will be > available. > Due to the overhead, the small amount of available time of the few > volunteers working on Maven, I prefer to have a worth set of changes. > In this case the impact of the changes can be huge, and I want to have > enough faith that we won't introduce irreversible mistakes. > Don't expect a new official release in the 3 next months, however we might > have alpha or beta releases. > > There is a wiki page that explains this topic in more detail[2] > It is still a draft, as there are still parts where we need to reach > consensus. > This page is intended as a base for discussions by Maven developers, users > and related projects, such as IDEs, Repository Managers, CI Servers, etc. > > Looking forward for any feedback, > > Robert Scholte > Apache Maven project > > [1] > https://github.com/apache/maven-integration-testing/tree/master/core-it-suite/src/test/resources/mng-6656-buildconsumer > [2] > https://cwiki.apache.org/confluence/display/MAVEN/Build+vs+Consumer+POM