--
You received this message because you are subscribed to the Google Groups "Quarkus Development mailing list" group.
To unsubscribe from this group and stop receiving emails from it, send an email to quarkus-dev...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/quarkus-dev/CAJ97idGvKGK8O83fpRO6pJRbQ4GsTv8sEkVFvYvBPDOFU7wj6g%40mail.gmail.com.
Sanne,
If I understand your suggestion right the perfect micro-bom would just be what each extension depends on - basically
if we could have every pom in the platform align all its dependencies we would all be good, correct?
And as that would require quite a massive alignment it isn't feasible thus instead make it so you generate a
bom somewhat dynamically based on what extensions your project actually uses ?
I see that as a possible future improvement to offer for those who really need it; but
I think having different default set of boms in play wether you use maven or gradle could end up being
a support and testing nightmare ?
I do think Alexey had a prototype for something similar for maven case but that would require use of manual configured maven extensions unfortunately.
No matter what - we do need to look into what the right granularity and version scheme are for the
"stacks".
/max
To view this discussion on the web visit https://groups.google.com/d/msgid/quarkus-dev/CAFm4XO02P4Dhu5Gxsp7DuVQO7mg-SHfqM%3Df4XwqsxAQwkHj_Dg%40mail.gmail.com.
/max
https://xam.dk/about
Hi Alexey,big +1 from me to challenge the status quo, the huge BOM is very problematic and I love you're exploring this.I do think you're on the right track conceptually, but I wonder if we could completely hide the notion of the "multiple fine-grained BOMs" you're proposing?Ideally each extension should have an implicit BOM, which is automatically applied when the extension is imported.
This implied micro-BOM would:- be generated at Quarkus build time, possibly by the same tooling which generates our quarkus-extension.properties- be checked for alignment with the platform, so to ensure different micro-BOM don't conflict with each other
The huge benefit would be to not needa) the incidental complexity of managing intermediate bom files: most users couldn't care less (however they don't want the associated problems with the current approach)b) to discuss what's the right level of granularity of each partial BOM (the right level of granularity is one for each extension)I suppose we might still want a mega-BOM which lists all of our extensions for Maven users so that they don't go matching extensions meant for different Quarkus builds, but this would be unnecessary for Gradle users as the Gradle plugin could enforce extension alignment in other ways. Ideally it could be made unnecessary for Maven users as well, but I guess we could discuss that another time.Additionally I suppose there might be some specific situations in which we might want to allow divergence between selected micro-BOM at cost of explicitly marking them as not compatible with each other; this could be useful for example to release an experimental extension introducing Hibernate ORM 6 as a possible alternative to the stable one which brings ORM 5. Overall I think it would be great to have such additional flexibility to allow for more experimentation and avoid us getting stuck because of self-imposed, unnecessary alignment requirements.
Sanne,
If I understand your suggestion right the perfect micro-bom would just be what each extension depends on - basically
if we could have every pom in the platform align all its dependencies we would all be good, correct?
And as that would require quite a massive alignment it isn't feasible thus instead make it so you generate a
bom somewhat dynamically based on what extensions your project actually uses ?
I see that as a possible future improvement to offer for those who really need it; but
I think having different default set of boms in play wether you use maven or gradle could end up being
a support and testing nightmare ?
I do think Alexey had a prototype for something similar for maven case but that would require use of manual configured maven extensions unfortunately.
No matter what - we do need to look into what the right granularity and version scheme are for the
"stacks".
On Wed, May 5, 2021 at 12:35 PM Sanne Grinovero <sa...@hibernate.org> wrote:Hi Alexey,big +1 from me to challenge the status quo, the huge BOM is very problematic and I love you're exploring this.I do think you're on the right track conceptually, but I wonder if we could completely hide the notion of the "multiple fine-grained BOMs" you're proposing?Ideally each extension should have an implicit BOM, which is automatically applied when the extension is imported.I actually did some research on that last summer, i think.This implied micro-BOM would:- be generated at Quarkus build time, possibly by the same tooling which generates our quarkus-extension.properties- be checked for alignment with the platform, so to ensure different micro-BOM don't conflict with each otherThat's the tricky point. Which platform would that be? Basically, an extension-specific BOM generated at extension build time is not going to be useful for extensions that will be integrated into a platform (for which the dependency constraints should be aligned), assuming we allow extensions to have their own release cycle (i.e. core, camel, kogito, etc). One extension may cause adjustments of the constraints of another extension. Unless all the platform extensions are released together (basically as a single project), the BOM generated at extension build time will have to be regenerated at platform release time or a new extension release will be required. Then, I supposed, the same extension release may be included in different versions of the same platform. Different versions of the same platform may have different constraint alignments, with all the consequences.In addition to that, a platform, among other things, represents a dev stack that was composed with some primary use-cases in mind. So, there could be multiple platforms (specialized dev stacks) and the same extension may appear in more than one platform with different dep constraint requirements, with all the consequences.
A side note, IMO, at some point, we should stop thinking of a platform as a 'universe'. At the time, I actually proposed to change the original artifactId from 'quarkus-platform-bom' to 'quarkus-universe-bom' because it was clear to me the BOM we were creating wasn't strictly a platform but just a phase in the evolution of the ecosystem and tools around it. It was important to create the basic notion of the platform but also have a way to contribute extensions from outside quarkus core. So I didn't want the term 'platform' to be diluted (at least that artifact id) and keep it for the future, just in case.
So, I am thinking some parts of the extension dependency constraints, JSON metadata and even some config options should be defined in the platform (dev stack) the extension is a part of instead of being fixed at the extension build time.The huge benefit would be to not needa) the incidental complexity of managing intermediate bom files: most users couldn't care less (however they don't want the associated problems with the current approach)b) to discuss what's the right level of granularity of each partial BOM (the right level of granularity is one for each extension)I suppose we might still want a mega-BOM which lists all of our extensions for Maven users so that they don't go matching extensions meant for different Quarkus builds, but this would be unnecessary for Gradle users as the Gradle plugin could enforce extension alignment in other ways. Ideally it could be made unnecessary for Maven users as well, but I guess we could discuss that another time.Additionally I suppose there might be some specific situations in which we might want to allow divergence between selected micro-BOM at cost of explicitly marking them as not compatible with each other; this could be useful for example to release an experimental extension introducing Hibernate ORM 6 as a possible alternative to the stable one which brings ORM 5. Overall I think it would be great to have such additional flexibility to allow for more experimentation and avoid us getting stuck because of self-imposed, unnecessary alignment requirements.I think the proposal is a step in that direction. I still like the idea of extension-specific BOMs and it should be researched further. The UX, in particular. We definitely don't want to see a BOM import per extension in POMs. Doing it "behind the scenes" is something to be researched, making sure the IDEs will still work too.
On Wed, 5 May 2021 at 13:02, Alexey Loubyansky <alexey.l...@redhat.com> wrote:On Wed, May 5, 2021 at 12:35 PM Sanne Grinovero <sa...@hibernate.org> wrote:Hi Alexey,big +1 from me to challenge the status quo, the huge BOM is very problematic and I love you're exploring this.I do think you're on the right track conceptually, but I wonder if we could completely hide the notion of the "multiple fine-grained BOMs" you're proposing?Ideally each extension should have an implicit BOM, which is automatically applied when the extension is imported.I actually did some research on that last summer, i think.This implied micro-BOM would:- be generated at Quarkus build time, possibly by the same tooling which generates our quarkus-extension.properties- be checked for alignment with the platform, so to ensure different micro-BOM don't conflict with each otherThat's the tricky point. Which platform would that be? Basically, an extension-specific BOM generated at extension build time is not going to be useful for extensions that will be integrated into a platform (for which the dependency constraints should be aligned), assuming we allow extensions to have their own release cycle (i.e. core, camel, kogito, etc). One extension may cause adjustments of the constraints of another extension. Unless all the platform extensions are released together (basically as a single project), the BOM generated at extension build time will have to be regenerated at platform release time or a new extension release will be required. Then, I supposed, the same extension release may be included in different versions of the same platform. Different versions of the same platform may have different constraint alignments, with all the consequences.In addition to that, a platform, among other things, represents a dev stack that was composed with some primary use-cases in mind. So, there could be multiple platforms (specialized dev stacks) and the same extension may appear in more than one platform with different dep constraint requirements, with all the consequences.Can't you do it the same as today? It seems to me you're introducing micro-BOM as fragments of the current BOM, so a reasonable starting point is to still have the current BOM around and use it to generate the fragments.
This will imply that the extensions with their own release cycle still still have to adhere with the versions as defined by the core. I totally understand this doesn't solve all problems and you have many other plans in mind, but this is a small step in the right direction.
A side note, IMO, at some point, we should stop thinking of a platform as a 'universe'. At the time, I actually proposed to change the original artifactId from 'quarkus-platform-bom' to 'quarkus-universe-bom' because it was clear to me the BOM we were creating wasn't strictly a platform but just a phase in the evolution of the ecosystem and tools around it. It was important to create the basic notion of the platform but also have a way to contribute extensions from outside quarkus core. So I didn't want the term 'platform' to be diluted (at least that artifact id) and keep it for the future, just in case.Right, the 'universe' won't scale but that's a different problem - it's still a good start to not impose alignment on thousands of libraries we don't need aligned.So, I am thinking some parts of the extension dependency constraints, JSON metadata and even some config options should be defined in the platform (dev stack) the extension is a part of instead of being fixed at the extension build time.The huge benefit would be to not needa) the incidental complexity of managing intermediate bom files: most users couldn't care less (however they don't want the associated problems with the current approach)b) to discuss what's the right level of granularity of each partial BOM (the right level of granularity is one for each extension)I suppose we might still want a mega-BOM which lists all of our extensions for Maven users so that they don't go matching extensions meant for different Quarkus builds, but this would be unnecessary for Gradle users as the Gradle plugin could enforce extension alignment in other ways. Ideally it could be made unnecessary for Maven users as well, but I guess we could discuss that another time.Additionally I suppose there might be some specific situations in which we might want to allow divergence between selected micro-BOM at cost of explicitly marking them as not compatible with each other; this could be useful for example to release an experimental extension introducing Hibernate ORM 6 as a possible alternative to the stable one which brings ORM 5. Overall I think it would be great to have such additional flexibility to allow for more experimentation and avoid us getting stuck because of self-imposed, unnecessary alignment requirements.I think the proposal is a step in that direction. I still like the idea of extension-specific BOMs and it should be researched further. The UX, in particular. We definitely don't want to see a BOM import per extension in POMs. Doing it "behind the scenes" is something to be researched, making sure the IDEs will still work too.Yes exactly, this is very much your proposal to which I'm suggesting only minimal changes to how you compute the BOM fragments: automatically, from our extension's dependencies - this should help with correctness too as we'd define exactly what we tested with.
BTW I think it would be totally fine to see a "BOM import per extension" in the POMs - sure it's verbose but POMs are verbose, and we have the tools to generate these.
On the upside, IDEs will be able to present the user with the best matching representation of the project (I still wish we could explore the behind the scenes idea but I think that could wait and probably needs some refinement)Thanks
--
You received this message because you are subscribed to the Google Groups "Quarkus Development mailing list" group.
To unsubscribe from this group and stop receiving emails from it, send an email to quarkus-dev...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/quarkus-dev/CAFm4XO0FqUgnU6dXqEpW7MR93G%3DmAMP7Dbwb6xPrBQnVjsQDyw%40mail.gmail.com.
On 6 May 2021, at 11:51, Sanne Grinovero wrote:
> On Wed, 5 May 2021 at 12:57, Max Rydahl Andersen <mand...@redhat.com>
> wrote:
>
>> Sanne,
>>
>> If I understand your suggestion right the perfect micro-bom would
>> just be
>> what each extension depends on - basically
>> if we could have every pom in the platform align all its dependencies
>> we
>> would all be good, correct?
>>
> That's what we already do today, no?
No, if you remove the quarkus bom and just use extensions directly you
will get
a different resolved dependency set ( no matter if you use gradle or
maven ).
On 7 May 2021, at 11:29, Sanne Grinovero wrote:
sorry for missing this email! albeit late comments are below.
On Fri, 7 May 2021 at 00:00, Max Rydahl Andersen mand...@redhat.com
wrote:On 6 May 2021, at 11:51, Sanne Grinovero wrote:
On Wed, 5 May 2021 at 12:57, Max Rydahl Andersen mand...@redhat.com
wrote:Sanne,
If I understand your suggestion right the perfect micro-bom would
just be
what each extension depends on - basically
if we could have every pom in the platform align all its dependencies
we
would all be good, correct?That's what we already do today, no?
No, if you remove the quarkus bom and just use extensions directly you
will get
a different resolved dependency set ( no matter if you use gradle or
maven ).
I'm really struggling to follow you Max, I never suggested to get rid of
BOMs;
Alexey suggested to split BOMs in smaller ones and I am aligned with that,
I'm just highlighting that at implementation level the right level of
granularity
of which dependencies we should be managing is 1:1 aligned with extensions,
rather than "stacks".
Ack, and I understand the sentiment here - but it does mean alot of at least perceived
duplication in maven pom.xml just to use an extension...
You challenged me with alleged difficulties about which versions these BOMs
should have, to which I don't have an answer for except pointing out that we
can keep producing these BOMs in the same way as we do today: sourcing
the versions from a unique manifest file which enforces dependencies across
all artifacts in the same repository.Sure this isn't scaling too well for us and once we have separation of BOMs
in place we can work on allowing ad-hoc, controlled exceptions to the rule,
but we can at least keep producing BOMs so to implement the dependency
alignment and prevent the issues such as the RESTEasy one you mention,
but also - more importantly - impose usage with strict adherence to the
versions
we run integration tests with.That is exactly what we do today, I agree it's not perfect but I'm not
making any
suggestions about changing this - I'm just welcoming the proposal of
splitting
as we will need the additional flexibility that this will make available.
I think we are agreeing :) just that instead of going from 1 bom to 150+ boms
we are working towards having a system in place that lets us actually get there eventually
but starting out with "stacks" matching where the team/functional boundaries are as that at least
lets us get started.
In my first paragraph today I highlight "implementation" so to stress that
I'm not
expressing an opinion against introducing the notion of "stacks" at user
level,
but if stacks are a notion to help users getting started I'm suggesting
that they
should stick at being a consistent aggregation of extensions as a concept,
they don't necessarily have to be implemented as a single BOM.Alexey then pointed out that people would need to import many BOMs,
I'm not 100% persuaded that this would be a real problem but I can trust him
on this and appreciate it's a factor that needs taking into account.Maybe ideally we could even produce the micro-BOMs like I suggested and
define stacks as nothing more than a BOM which aggregates multiple
micro-BOMs?
This way we'd have the option for users to go micro and a clean definition
of "stacks",
defined purely as user-friendly sugar on top of a sound base layer.
I definitely can see the value in exploring that option!
Alexey - how hard would this actually be to do as an experiment in the current bom generator ?
Basically iterate every extension can generate a matching io.quarkus.platform.ext:artifact-id.bom?
The benefit I see in the 1:1 alignment with extensions is that:
- people who prefer the minimal option over stacks have such an option
- other platforms can define their own "stacks" by mix&match of core
extensions
- end users to run with dependencies perfectly aligned to how we run
integration tests
-- OR our tooling being able to warn against an inconsistency, useful
for native.
Agreed; we'll though also want our project creation to pick one of the approaches.
in short - I think we are on the right path to explore this!
/max
HTH
need it; but
I think having different default set of boms in play wether you use
Thanks
- be generated at Quarkus build time, possibly by the same tooling
which
generates our quarkus-extension.properties
- be checked for alignment with the platform, so to ensure different
- MOTIVATION
- PROPOSAL
platform release may imply updating more than one BOM version. The
dev
tools will be able to check for and list the available updates, and
also
apply them, if requested.
Users who prefer editing project configs manually would be able to
use
the tools to list the available updates and apply them manually.
Manual project config maintenance becomes more error prone with this
model. The good news is that, at app build time, we would be able to
check
whether the imported platform BOMs belong to the same platform stack
release and are a tested combination. If it’s not the case we
would display
a clear error/warning message indicating which BOM versions were
found to
be misaligned and how the versions should be adjusted to have a
properly
aligned stack.
- APPLICATION POM EXAMPLES
- PoC
/max
https://xam.dk/about