为什么需要指定版本依赖?
why version dependency needs to be specified?
我有 pom.xml 个赞,
<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>
我无法理解为什么我需要在依赖项下的 cdi-api 上指定版本,而它已经在 microprofile 中定义(在 dependencymanagement 内部)。
org.eclipse.microprofile:microprofile
artifact 声明对 javax.enterprise:cdi-api
的依赖,因此如果您在 POM 中将 org.eclipse.microprofile:microprofile
声明为依赖,则 javax.enterprise:cdi-api
将被传递。
在您问题的示例中,您在 <dependencyManagement>
部分中声明了 org.eclipse.microprofile:microprofile
,此部分整合了对每个依赖项的版本、范围和排除项的管理,但为了在您的项目 必须 将其包含在 <dependency>
部分。
因此,如果您将此添加到 <dependency>
部分...
<dependency>
<groupId>org.eclipse.microprofile</groupId>
<artifactId>microprofile</artifactId>
</dependency>
...然后 org.eclipse.microprofile:microprofile
将包含在您的项目中,因此 javax.enterprise:cdi-api
将被传递地包含并且您不必显式声明它。
此 pom 不是定义依赖项版本的标准 bom,但必须像标准依赖项一样使用: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.
你实际上需要依赖那个 pom:
<dependency>
<groupId>org.eclipse.microprofile</groupId>
<artifactId>microprofile</artifactId>
<type>pom</type>
</dependency>
如果您希望一切正常,请不要忘记添加 pom 类型并指定版本或在您的依赖项管理中使用 pom 类型引用此版本。 glytching 忘记了 pom 类型,这就是为什么这不起作用。
我有 pom.xml 个赞,
<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>
我无法理解为什么我需要在依赖项下的 cdi-api 上指定版本,而它已经在 microprofile 中定义(在 dependencymanagement 内部)。
org.eclipse.microprofile:microprofile
artifact 声明对 javax.enterprise:cdi-api
的依赖,因此如果您在 POM 中将 org.eclipse.microprofile:microprofile
声明为依赖,则 javax.enterprise:cdi-api
将被传递。
在您问题的示例中,您在 <dependencyManagement>
部分中声明了 org.eclipse.microprofile:microprofile
,此部分整合了对每个依赖项的版本、范围和排除项的管理,但为了在您的项目 必须 将其包含在 <dependency>
部分。
因此,如果您将此添加到 <dependency>
部分...
<dependency>
<groupId>org.eclipse.microprofile</groupId>
<artifactId>microprofile</artifactId>
</dependency>
...然后 org.eclipse.microprofile:microprofile
将包含在您的项目中,因此 javax.enterprise:cdi-api
将被传递地包含并且您不必显式声明它。
此 pom 不是定义依赖项版本的标准 bom,但必须像标准依赖项一样使用: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.
你实际上需要依赖那个 pom:
<dependency>
<groupId>org.eclipse.microprofile</groupId>
<artifactId>microprofile</artifactId>
<type>pom</type>
</dependency>
如果您希望一切正常,请不要忘记添加 pom 类型并指定版本或在您的依赖项管理中使用 pom 类型引用此版本。 glytching 忘记了 pom 类型,这就是为什么这不起作用。