Le mer. 19 mars 2025 à 14:21, Thomas Reinhardt <tho...@reinhardt.com> a
écrit :

>
> If you need to digest a large 3rd party project you have to "know" all
> the internal versions of that project and/or its dependencies in some way.
>

Any reason to that? It was cleanly handled before bom without any issues.


>
> For example we import com.fasterxml.jackson:jackson-parent which fixes
> versions of about 60 artifacts. Of course we don't use all of those but
> if we add e.g. some new transport mechanism, we are automatically
> getting the correct version. In this case it is somehow easy, as those
> versions are all (or at least most of them) the same.
>

This is what transitive dependencies are giving you and for sibling
artifacts properties.

I would even highlight it is dangerous to do it the way you mention cause
in sibling modules you will inherit a version you do not want which
overrides transitive dependencies and breaks your module.


>
> A more complex example is org.wildfly:wildfly-ejb-client-bom which
> manages lots and lots of artifacts, all with different versions.
>

And it doesn't need bom, just type=pom.


>
> Arquillian is not even usable without
> org.jboss.arquillian:arquillian-bom I think, because it would be
> extremely time consuming to hunt down all the dependencies that you have
> to have in the right versions because there were breaking changes.
>

It is perfectly and you do not have to hunt anything.
Now, I can confirm using the bom breaks your project if you are using any
competing dependency.


>
> Of course some of those are just symptoms of projects that arguably
> should have been handled in a more simple way. But that is not the world
> we are living in and we have to use what is out there.
>
> And honestly - I hate it when I have to use something with more than a
> couple of artifacts and there is no bom.
>
> So with all due respect: please never even think about removing bom
> support. It is an essential feature for any non-toy project. If anything
> we (the maven users) need more support for boms. One thing that I am
> always missing is some kind of information like "I need xyz-1.2.3.jar
> and its dependencies, what are the coordinates for its bom". But I digress.
>

Don't get me wrong, I do not want to remove the hability to bring a full
consistent stack of dependencies but the solution is not bom and exists
since 10+ years in maven natively.


>
>
>         Thomas
>
>
>
> On 19/03/2025 13:43, Romain Manni-Bucau wrote:
> > Can we step back a sec, what does bom bring that is not solved without?
> > Dependency resolution is perfectly handled with type=pom (without
> > scope=import), reusability with multiple scope is quite trivial with a
> > property for the version and potentially the whole gav.
> > At the end we can forbid (= stop supporting) bom in v>4.0.0 poms IMHO.
> >
> > Romain Manni-Bucau
> > @rmannibucau <https://x.com/rmannibucau> | .NET Blog
> > <https://dotnetbirdie.github.io/> | Blog <https://rmannibucau.github.io/>
> | Old
> > Blog <http://rmannibucau.wordpress.com> | Github
> > <https://github.com/rmannibucau> | LinkedIn
> > <https://www.linkedin.com/in/rmannibucau> | Book
> > <
> https://www.packtpub.com/en-us/product/java-ee-8-high-performance-9781788473064
> >
> >
> >
> > Le mer. 19 mars 2025 à 11:51, Tamás Cservenák <ta...@cservenak.net> a
> > écrit :
> >
> >> Howdy,
> >>
> >> some tooling already exists:
> >> gav-dm-tree:
> >> https://gist.github.com/cstamas/7e3f8d444a74d9a2f4f7d7114af156bf
> >> gav-dm-list
> >> <
> https://gist.github.com/cstamas/7e3f8d444a74d9a2f4f7d7114af156bfgav-dm-list
> >:
> >> https://gist.github.com/cstamas/419f4663744150b76f737cbd89fedf4f
> >> and the new "flatten bom" mojo.
> >>
> >> And my proposal is to "pre-digest" the BOM, not any BOM you consume,
> >> just those super-BOMs that have deep (import) hierarchy (look at
> >> dm-tree and dm-list outputs above).
> >> While I did flatten-BOM, I was also tinkering to do some "merge" or
> >> alike, but realized that:
> >> * simple tool is better than complex
> >> * flatten "solves" the problem for big BOMs (for example, using this
> >> tool for Junit BOM makes no sense)
> >> * the rest of how to "fit" flattened BOM becomes simpler, as now that
> >> they are flat, you DO have control.
> >> * generation of flat BOM should be consistent: for same BOM GAV the
> >> output should be SAME -- just keep it simple; if we add knobs like
> >> which version to select, user could easily shoot himself in the foot
> >>
> >> The goal of new mojo is to flatten input BOM and do it consistently:
> >> if you point it at same BOM, your output is same as before (sans
> >> possible coordinate change of the emitted BOM itself)
> >>
> >> T
> >>
> >> On Wed, Mar 19, 2025 at 9:16 AM Hervé Boutemy <hbout...@apache.org>
> wrote:
> >>>
> >>> FTR Jira issues
> >>> https://issues.apache.org/jira/browse/MNG-7906
> >>> https://issues.apache.org/jira/browse/MNG-7854
> >>> https://issues.apache.org/jira/browse/MPH-183
> >>> and all linked issues
> >>>
> >>> I don't know how this is relates with bom packaging in Maven 4
> >>>
> >>
> https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Bill_of_Materials_.28BOM.29_POMs
> >>>
> >>>
> >>> The fact that this dependencyManagement import happens at effective
> model
> >>> building stage, and not during dependency resolution, created specific
> >>> complexity on how to analyze conflict resolution, report (not possible
> to
> >>> dependency-tree -Dverbose), and have solutions for end-user to override
> >>> default conflict resolution result.
> >>>
> >>> I dislike the currently non-actionable WARNINGs, particularly when
> >> actionable
> >>> solution when a conflict resolution does not bring you the result you
> >> want, you
> >>> can override by declaring a dependencyManagement entry before import.
> >>>
> >>> On what conflict resolution algorithm is in place, should we change it,
> >> to
> >>> which one: discussion never went to a solid proposition.
> >>>
> >>> Notice that we don't have great usable documentation on that feature
> and
> >> its
> >>> problems: just long discussions in Jira issues.
> >>>
> >>> I discover here what I'll call a new proposal from Tamasz:
> >>> 1. promote avoiding multiple conflicting dependencyManagement imports,
> >> as they
> >>> are hard to analyze
> >>> 2. promote a merging tool where these conflicts can be worked on and
> >> choices
> >>> done: first wins? last wins? (personal addition) greater wins?
> >>> I'm sure some reporting on BOM POMs could also be interesting, given
> they
> >>> started small and easy to get when used individually, but went complex
> >> when
> >>> people started to assemble them
> >>>
> >>> HTH
> >>>
> >>> Hervé
> >>>
> >>> Le mardi 18 mars 2025, 18:47:49 CET Tamás Cservenák a écrit :
> >>>> Howdy,
> >>>>
> >>>> Problem with BOM imports is that they were never "done done" in Maven
> >>>> 3.x time-frame, and they work the total opposite to everything else in
> >>>> Maven (think dependencies, as Delany says), hence they work in "non
> >>>> Maven way", not intuitive way, and tend to cause (usually bad)
> >>>> surprises. Sadly, they are overused in many projects, especially with
> >>>> recursive-imports happening. Maven 4 just tries to warn you about
> >>>> these, when a dependency is "stepping on toe" of another dependency,
> >>>> but again, as a consumer, you have not much control over it.
> >>>> Personally, I'd avoid using BOMs like these, and I'd preferably
> >>>> generate my own.
> >>>>
> >>>> In short, BOMs should be
> >>>> * flat (no recursive import)
> >>>> * generated
> >>>> * curated
> >>>>
> >>>> Sadly, with BOM you point at, none of these stands. Maven 4 tries to
> >>>> "fix" things, that's all. Same as with CI Friendly support, this is
> >>>> just yet another "incomplete" implementation.
> >>>>
> >>>> Personally, I'd prevent or better REMOVE recursive import capability
> >>>> (so dep type=pom scope=import would NOT recursively import anything)
> >>>> -- just to force them to be flat for start.
> >>>> BOMs should be curated and generated (and flat).
> >>>>
> >>>> For these cases:
> >>>> * take a peek at BOM generator (used in Maven build as well):
> >>>> https://github.com/maveniverse/bom-builder-maven-plugin
> >>>> * took a stab for a tool I'd use: BOM flatten, try it
> >>>> out!https://github.com/maveniverse/toolbox/pull/180
> >>>>
> >>>> Regarding flatten-BOM: again, perso I'd NOT use BOM specified by you,
> >>>> but instead I'd deploy "flattened" BOM under my namespace (see gist
> >>>> example) and use that. Given it is generated, you can just generate
> >>>> new for any new version out there,
> >>>>
> >>>>
> >>>> My 5 cents
> >>>> T
> >>>>
> >>>> On Mon, Mar 17, 2025 at 8:43 PM Karl Heinz Marbaise
> >>>>
> >>>> <khmarba...@gmx.de.invalid> wrote:
> >>>>> Hi to all,
> >>>>>
> >>>>> currently I'm trying to build a simple spring boot application which
> >>>>> uses a BOM for spring-boot-dependencies..
> >>>>>
> >>>>>         <dependency>
> >>>>>
> >>>>>           <groupId>org.springframework.boot</groupId>
> >>>>>           <artifactId>spring-boot-dependencies</artifactId>
> >>>>>           <version>3.3.3</version>
> >>>>>           <scope>import</scope>
> >>>>>           <type>pom</type>
> >>>>>
> >>>>>         </dependency>
> >>>>>
> >>>>> So based on the releases of JUnit Jupiter, Mockito etc.
> >>>>> I define the BOM's of JUnit Jupiter and Mockito (and others; only
> >>>>> excerpts shown here) before the spring boot dependencies like this,
> >>>>> because I want to use newer versions, than spring-boot-dependencies
> >>>>> defines.>
> >>>>>     <dependencyManagement>
> >>>>>
> >>>>>       <dependencies>
> >>>>>
> >>>>>         <dependency>
> >>>>>
> >>>>>           <groupId>org.junit</groupId>
> >>>>>           <artifactId>junit-bom</artifactId>
> >>>>>           <version>5.12.1</version>
> >>>>>           <type>pom</type>
> >>>>>           <scope>import</scope>
> >>>>>
> >>>>>         </dependency>
> >>>>>         <dependency>
> >>>>>
> >>>>>           <groupId>org.mockito</groupId>
> >>>>>           <artifactId>mockito-bom</artifactId>
> >>>>>           <version>5.16.1</version>
> >>>>>           <scope>import</scope>
> >>>>>           <type>pom</type>
> >>>>>
> >>>>>         </dependency>
> >>>>>         ..
> >>>>>         <dependency>
> >>>>>
> >>>>>           <groupId>org.springframework.boot</groupId>
> >>>>>           <artifactId>spring-boot-dependencies</artifactId>
> >>>>>           <version>${spring.boot.version}</version>
> >>>>>           <scope>import</scope>
> >>>>>           <type>pom</type>
> >>>>>
> >>>>>         </dependency>
> >>>>>         ..
> >>>>>
> >>>>>       </dependencies>
> >>>>>
> >>>>>     </dependencyManagement>
> >>>>>
> >>>>> If I build the project Maven 4.0.0-rc3 I got a bunch of warnings like
> >>>>> this:
> >>>>> mvn clean -e
> >>>>> [INFO] Error stacktraces are turned on.
> >>>>> [INFO]
> >>>>> .....
> >>>>> [INFO] Scanning for projects...
> >>>>> [WARNING]
> >>>>> [WARNING] 26 problems were encountered while building the effective
> >>>>> model for 'com.soebes.spring.example:employee:jar:0.0.1-SNAPSHOT'
> >> (use
> >>>>> -e to see details)
> >>>>> [WARNING] Ignored POM import for:
> >>>>> org.assertj:assertj-core:jar:3.25.3@compile as already imported
> >>>>> org.assertj:assertj-core:jar:3.27.3@compile. Add the conflicting
> >> managed
> >>>>> dependency directly to the dependencyManagement section of the POM.
> >>>>> [WARNING] Ignored POM import for:
> >>>>> org.assertj:assertj-guava:jar:3.25.3@compile as already imported
> >>>>> org.assertj:assertj-guava:jar:3.27.3@compile. Add the conflicting
> >>>>> managed dependency directly to the dependencyManagement section of
> >> the
> >>>>> POM.
> >>>>> [WARNING] Ignored POM import for:
> >>>>> org.junit.jupiter:junit-jupiter:jar:5.10.3@compile as already
> >> imported
> >>>>> org.junit.jupiter:junit-jupiter:jar:5.12.1@compile. Add the
> >> conflicting
> >>>>> managed dependency directly to the dependencyManagement section of
> >> the
> >>>>> POM....
> >>>>>
> >>>>> In Maven 3.9.9 I can build that project without any warning, because
> >> the
> >>>>> junit-bom is defined before the spring-boot-dependencies (which has
> >>>>> junit-bom on it's own in an older version), but overwrites the
> >> defined
> >>>>> in the spring-boot-dependencies with the newer versions, which is
> >>>>> exactly what I want..
> >>>>>
> >>>>> Back to Maven 4:
> >>>>> So does that mean I have to add all the deps which are coming from
> >> the
> >>>>> junit-bom (also for the deps from assertj-bom, mockito-bom etc.)
> >>>>> manually into my dependencyManagement, as suggested?
> >>>>>
> >>>>> That will wipe away any advantage that using BOMs gives me.
> >>>>>
> >>>>> Is there a better solution which I'm not yet aware of?
> >>>>>
> >>>>> Kind regards
> >>>>> Karl Heinz Marbaise
> >>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> >>>>> For additional commands, e-mail: dev-h...@maven.apache.org
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> >>>> For additional commands, e-mail: dev-h...@maven.apache.org
> >>>
> >>>
> >>>
> >>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> >>> For additional commands, e-mail: dev-h...@maven.apache.org
> >>>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> >> For additional commands, e-mail: dev-h...@maven.apache.org
> >>
> >>
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> For additional commands, e-mail: dev-h...@maven.apache.org
>
>

Reply via email to