Reputation: 3075
I have pom.xml like,
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.eclipse.microprofile</groupId>
<artifactId>microprofile</artifactId>
<version>1.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
I am unable to understand why am I required to specify version on cdi-api under dependencies when it is already defined in microprofile (inside dependencymanagement).
Upvotes: 0
Views: 58
Reputation: 4000
This pom isn't a standard bom that would define version of the dependencies but must be used like a standard dependency: https://github.com/eclipse/microprofile-bom
This style of BOM does not go in a dependencyManagement section, using import scope, and you cannot add dependencies declared in the BOM without version elements as is typically done with that style of BOM.
You actually need to depend on that pom:
<dependency>
<groupId>org.eclipse.microprofile</groupId>
<artifactId>microprofile</artifactId>
<type>pom</type>
</dependency>
Don't forget to add the type pom and either specify the version or reference this version in your dependency management with type pom if you want everything to work. glytching forgot the type pom, that's why this doesn't work.
Upvotes: 2
Reputation: 48015
The org.eclipse.microprofile:microprofile
artifact declares a dependency on javax.enterprise:cdi-api
so if you declare org.eclipse.microprofile:microprofile
as a dependency in your POM then javax.enterprise:cdi-api
will be provided transitively.
In the example in your question you declared org.eclipse.microprofile:microprofile
in the <dependencyManagement>
section, this section consolidates management of the version, scope, and exclusions for each dependency but in order to use that dependency in your project you must include it in the <dependency>
section.
So, if you add this to your <dependency>
section ...
<dependency>
<groupId>org.eclipse.microprofile</groupId>
<artifactId>microprofile</artifactId>
</dependency>
... then org.eclipse.microprofile:microprofile
will be included in your project and hence javax.enterprise:cdi-api
will be included transitively and you won't have to declare it explicitly.
Upvotes: 1