Search code examples
mavenmaven-bom

How to find a Maven dependency version declaration imported from a BOM


A multi-module parent POM declares the following BOM import:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.spring.platform</groupId>
      <artifactId>platform-bom</artifactId>
      <version>${spring.io.platform.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>

Then a module POM declares a Hibernate dependency:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
</dependency>

How do I find out with Maven command line or IntelliJ where the effective Hibernate version is defined?

Running mvn dependency:tree against my module yields:

...
[INFO] +- org.hibernate:hibernate-core:jar:4.3.11.Final:compile
...

which is not exactly helpful because it looks no different than if I managed the Hibernate version myself. If you have to do this manually you

  • start at platform-bom-2.0.3.RELEASE.pom, search for Hibernate -> nothing
  • go to its parent spring-boot-starter-parent-1.3.3.RELEASE.pom, search for Hibernate -> nothing
  • go to its parent spring-boot-dependencies-1.3.3.RELEASE.pom, search for Hibernate -> finally...

But what an ordeal. Of course you could check http://docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions but isn't that information Maven should be able to find on its own?


Solution

  • I was trying to use mvn help:effective-pom -Dverbose from this other answer, but it didn't work for me because it was using maven-help-plugin:2.2, and -Dverbose was introduced in 3.2.0.

    Instead, you should thus force the version in the command line:

    mvn org.apache.maven.plugins:maven-help-plugin:3.2.0:effective-pom -Dverbose=true -Doutput=effective-pom.xml
    

    (better to use -Doutput because the file can be big and it is not convenient to read it in a terminal)