2.3.3. 管理项目依赖项

这部分论述了在红帽 JBoss 企业应用平台上对材料(BOM)POM 的使用情况。

BOM 是一个 Maven pom.xml (POM)文件,用于指定模块的所有运行时依赖项的版本。版本依赖项列在 文件的依赖项管理部分中。

项目使用 BOM,方法是将其 groupId:artifactId:version (GAV)添加到项目的 pom.xml 文件的依赖项管理部分,并指定 <scope>import</scope><type>pom</type> 元素值。

注意

在很多情况下,POM 项目文件中的依赖关系使用 提供 的范围。这是因为这些类是在运行时由应用服务器提供的,而且不需要将它们与用户应用打包。

支持的 Maven Artifacts

作为产品构建流程的一部分,JBoss EAP 的所有运行时组件都是从受控环境中的源代码构建的。这有助于确保二进制工件不包含任何恶意代码,并且它们在产品的生命周期内得到支持。这些工件可以通过 -redhat 版本限定符(如 1.0.0-redhat-1 )轻松识别。

将受支持的构件添加到构建配置 pom.xml 文件可确保构建使用正确的二进制构件来进行本地构建和测试。请注意,带有 -redhat 版本的构件不一定是受支持的公共 API 的一部分,将来的修订可能会改变。有关公共支持的 API 的详情,请查看发行版中包含的 Javadoc 文档

例如,要使用受支持的 Hibernate 版本,请在构建配置中添加类似如下的内容:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>5.3.1.Final-redhat-1</version>
  <scope>provided</scope>
</dependency>

请注意,上例中包含 <version/> 字段的值。不过,建议您使用 Maven 依赖项管理来配置依赖项版本。

依赖项管理

Maven 包括管理整个构建过程中直接和传递依赖关系版本的机制。有关使用依赖项管理的一般信息,请参阅 Apache Maven 项目:依赖机制简介

在您的构建中直接使用一个或多个支持的红帽依赖关系不能保证所有构建的传递依赖项都会被完全支持。Maven 构建通常使用来自 Maven 中央存储库和其他 Maven 存储库的构件源组合。

JBoss EAP Maven 存储库中包含了依赖性管理 BOM,用于指定所有支持的 JBoss EAP 二进制构件。此 BOM 可以在构建中使用,以确保 Maven 将受支持的 JBoss EAP 依赖项的优先级放在构建中的所有直接和传递依赖关系上。换句话说,传输依赖关系将管理到正确的受支持的依赖版本(若适用)。此 BOM 的版本与 JBoss EAP 版本匹配。

<dependencyManagement>
  <dependencies>
    ...
    <dependency>
      <groupId>org.jboss.bom</groupId>
      <artifactId>eap-runtime-artifacts</artifactId>
      <version>7.3.0.GA</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    ...
  </dependencies>
</dependencyManagement>
注意

在 JBoss EAP 7 中,此 BOM 的名称已从 eap6 支持的工件改为 eap -runtime-artifacts。此更改的目的是更清楚,此 POM 中的工件是 JBoss EAP 运行时的一部分,但不一定是受支持的公共 API 的一部分。些 JAR 包含内部 API 和功能,它们可能会在版本间有所变化。

JBoss EAP Jakarta EE Specs BOM

jboss-jakartaee-8.0 BOM 包含 JBoss EAP 使用的 Jakarta EE 规范 API JAR。

要在项目中使用此 BOM,请首先在 POM 文件的 dependencyManagement 部分中添加 jboss-jakartaee-8.0 BOM 依赖项,为 groupId 指定 org.jboss.spec,然后添加应用所需特定 API 的依赖项。这些依赖项不需要版本,并使用 提供 的范围,因为 jboss-jakartaee-8.0 BOM 中包含了这些 API。

以下示例使用 jboss-jakartaee-8.0 BOM 的 1.0.0.Alpha1 版本添加 Servlet 和 Jakarta 服务器页面 API 的依赖项。

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.jboss.spec</groupId>
      <artifactId>jboss-jakartaee-8.0</artifactId>
      <version>1.0.0.Alpha1</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    ...
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>org.jboss.spec.javax.servlet</groupId>
    <artifactId>jboss-servlet-api_4.0_spec</artifactId>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>org.jboss.spec.javax.servlet.jsp</groupId>
    <artifactId>jboss-jsp-api_2.3_spec</artifactId>
    <scope>provided</scope>
  </dependency>
  ...
</dependencies>
注意

JBoss EAP 为大部分产品组件的 API 打包并提供 BOM。许多此类 BOM 都方便地打包到一个更大的 jboss-eap-jakartaee8 BOM 中,组Id 为 org.jboss.bomjboss-jakartaee-8.0 BOM( 组为 org. jboss.spec )包含在这个较大的 BOM 中。这意味着,如果您使用在此 BOM 中打包的其他 JBoss EAP 依赖项,您只需将一个 jboss-eap-jakartaee8 BOM BOM 添加到项目的 POM 文件中,而不是单独添加 jboss-jakartaee-8.0 和其他 BOM 依赖项。

JBoss EAP BOMs 可用于应用程序开发

下表列出了可用于应用程序开发的 Maven BOMs。

表 2.1. JBoss BOMs

BOM Artifact ID使用案例

eap-runtime-artifacts

支持的 JBoss EAP 运行时构件.

jboss-eap-jakartaee8

支持的 JBoss EAP Jakarta EE 8 API 外加其他 JBoss EAP API JAR.

jboss-eap-jakartaee8-with-spring4

jboss-eap-jakartaee8 加推荐 Spring 4 版本.

jboss-eap-jakartaee8-with-tools

jboss-eap-jakartaee8 加上 Arquillian 等开发工具.

注意

JBoss EAP 6 中的这些 BOM 合并到更少的 BOM 中,以简化大多数用例的使用。Hibernate、日志记录、事务、消息传递和其他公共 API JAR 现在包含在 jboss-eap-jakartaee8 BOM 中,而不是为每个情况要求单独的 BOM。

以下示例使用 jboss-eap-jakartaee8 BOM 的 7.3.0.GA 版本。

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.jboss.bom</groupId>
      <artifactId>jboss-eap-jakartaee8</artifactId>
      <version>7.3.0.GA</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    ...
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <scope>provided</scope>
  </dependency>
  ...
</dependencies>
JBoss EAP 客户端 BOM

客户端 BOMs 不创建依赖项管理部分或定义依赖项。相反,它们是其他 BOM 的聚合,用于打包远程客户端用例所需的一组依赖项。

wildfly-ejb-client-bomwildfly-jms-client -bom 和 wildfly-jaxws-client-bomjboss-eap-jakartaee8 BOM 管理,因此您无需管理项目依赖项中的版本。

以下是如何将 wildfly-ejb-client-bom、wildfly- jms-client-bomwildfly-jaxws-client-bom 依赖项添加到项目的示例:

<dependencyManagement>
  <dependencies>
    <!-- JBoss stack of the Jakarta EE APIs and related components.  -->
    <dependency>
      <groupId>org.jboss.bom</groupId>
      <artifactId>jboss-eap-jakartaee8</artifactId>
      <version>7.3.0.GA</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
  ...
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>org.jboss.eap</groupId>
    <artifactId>wildfly-ejb-client-bom</artifactId>
    <type>pom</type>
  </dependency>
  <dependency>
    <groupId>org.jboss.eap</groupId>
    <artifactId>wildfly-jms-client-bom</artifactId>
    <type>pom</type>
  </dependency>
  <dependency>
    <groupId>org.jboss.eap</groupId>
    <artifactId>wildfly-jaxws-client-bom</artifactId>
    <type>pom</type>
  </dependency>
  ...
</dependencies>

有关 Maven 依赖项和 BOM POM 文件的更多信息,请参阅 Apache Maven Project - 依赖机制简介