> Is it because the oci-java-sdk is 2 hops from my pom and the jackson-bom
is 3 hops?

Yes, my experience tells that the distance from your pom matters.

> Is there anything I can do to control this such that the versions defined
in my parent "win"?

No, I think you can only import jackson-bom of your choice.
But then there's a risk that that Jackson version might not work
ocj-java-sdk (and
future spring-boot versions).

On Thu, Feb 4, 2021 at 5:45 AM Andres Almiray <aalmi...@gmail.com> wrote:

> I'm quite interested in this conversation as in my experience the process
> of producing & consuming BOMs is still misunderstood.
>
> Regarding 3rd party dependencies in a BOM, I've seen 2 main usages of BOMs.
>
> - library BOM: defines *only* those modules belonging to the same
> multi-project. Examples:
> https://github.com/oracle/oci-java-sdk/blob/master/bmc-bom/pom.xml
> https://github.com/oracle/helidon/blob/master/bom/pom.xml
>
> - stack BOM: defines both modules in the same multi-project build and 3rd
> party dependencies. This is the preferred way to distribute framework BOMs,
> such as Micronaut, Spring Boot, Helidon, etc. Examples:
> https://github.com/oracle/helidon/blob/master/dependencies/pom.xml
>
> Note the names "library" and "stack" are not official nor the official
> documentation makes explicit difference between them AFAICT. This is based
> on usage observation.
> Now, the docs do not mention BOMs should not have parents, do they? The
> Helidon BOM has a parent that defines publication & build-only concerns, no
> <dependencyManagement> nor <dependencies>
> https://github.com/oracle/helidon/blob/master/parent/pom.xml
>
> I think that's a valid usage. The oci-java-sdk parent POM OTOH not only
> defines <dependencyManagement> but also <dependencies>, thus forcing those
> dependencies into every child module if I'm not mistaken
> https://github.com/oracle/oci-java-sdk/blob/master/pom.xml
>
> BOMs are just POMs that must have <packaging>pom</packaging> and a
> <dependencyManagement> section (besides GAV coordinates); I believe every
> other valid POM element may or may not be applied however the PomChecker
> rules go beyond that and ban a few extra elements
>
> https://github.com/kordamp/pomchecker/blob/master/pomchecker-core/src/main/java/org/kordamp/maven/checker/BomChecker.java
>
> All this being said, the rules for crafting BOMs are still unclear to me,
> happy to be corrected and help clear them out :-)
>
> Cheers,
> Andres
>
> -------------------------------------------
> Java Champion; Groovy Enthusiast
> http://andresalmiray.com
> http://www.linkedin.com/in/aalmiray
> --
> What goes up, must come down. Ask any system administrator.
> There are 10 types of people in the world: Those who understand binary, and
> those who don't.
> To understand recursion, we must first understand recursion.
>
>
> On Thu, Feb 4, 2021 at 8:37 AM Thomas Broyer <t.bro...@gmail.com> wrote:
>
> > Actually, I'd say those BOMs probably shouldn't declare jackson. The
> > project's dependencies should be enough, and you explicitly declare the
> > version you need/want to use.
> > In the case of the OCI BOM, it seems quite clear that it mistakenly
> > inherits dependency management from it's parent POM: most BOMs shouldn't
> > have a parent, or their parent shouldn't include dependency management
> for
> > their submodules.
> >
> > Le jeu. 4 févr. 2021 à 00:56, Rupert Madden-Abbott <
> > rupert.madden.abb...@gmail.com> a écrit :
> >
> > > Hi,
> > >
> > > I have the following structure in my pom:
> > >
> > > My pom <- import oci-java-sdk-bom <- parent = ocj-java-sdk
> > > ^
> > > |
> > > parent = spring-boot-starter-parent
> > > ^
> > > |
> > > parent = spring-boot-dependencies <- import jackson-bom
> > >
> > >
> > > Both jackson-bom and oci-java-sdk have a dependency management section
> > and
> > > declare jackson-databind and I am also using this dependency in my
> > pom.xml
> > > without specifying a version.
> > >
> > > I have found that the version from oci-java-sdk is used and not the
> > version
> > > from jackson-bom (via spring boot). I naively expected that anything
> > pulled
> > > in from my pom's parent would instead take precedence.
> > >
> > > Why is this? Is it because the oci-java-sdk is 2 hops from my pom and
> the
> > > jackson-bom is 3 hops? Is there anything I can do to control this such
> > that
> > > the versions defined in my parent "win"?
> > >
> > > Where are these rules documented so I can work this out for myself in
> the
> > > future?
> > >
> > > Are there any tools/plugins that can help say why a given version has
> > been
> > > selected?
> > >
> >
>


-- 
Regards,
Tomo

Reply via email to