Ubuntu 22.04 安装 Apache OpenWebBeans 4.1.1 指南

Ubuntu 22.04 安装 Apache OpenWebBeans 4.1.1(Jakarta CDI 4.0 实现)指南:JDK 21 环境准备、1.x/2.x/4.x 版本选型对照、官方二进制分发包与 Maven 依赖引入两种方案、最小 CDI 应用运行验证与卸载,全程实测。

Apache OpenWebBeansApache OpenWebBeans2026/10/12

Ubuntu 22.04 安装 Apache OpenWebBeans 4.1.1 指南

目标:在 Ubuntu 22.04 服务器上完成 Apache OpenWebBeans 4.1.1(Jakarta Contexts and Dependency Injection 4.0 规范实现,以 Java jar 库 + SE 容器形态提供)的安装与验证。本文给出 JDK 21 环境准备、1.x/2.x/4.x 版本选型对照、「官方二进制分发包解压」与「Maven 依赖引入」两种方案,以及最小 CDI 应用运行验证与卸载方式。所有命令与回显均在 Ubuntu 22.04.5 + JDK 21 环境实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(VERSION_CODENAME=jammy)
  • 架构:x86_64(内核 6.8.0-138-generic)
  • Java:OpenJDK 21.0.12.1(openjdk-21-jdk-headless,Ubuntu 官方源)
  • 构建工具:Apache Maven 3.6.3(Ubuntu 官方源)
  • OpenWebBeans 版本:4.1.1(当前最新稳定主线,实现 CDI 4.0,jakarta.* 命名空间)
  • 演示账号:root
  • 安装目录:/opt/openwebbeans/
  • 示例工程目录:/root/owb-demo/

💡 说明:Apache OpenWebBeans 是 Apache 软件基金会下的 Jakarta Contexts and Dependency Injection(CDI 4.0)规范实现,发布物是 Java jar 库(org.apache.webbeans.* / org.apache.openwebbeans.*),不提供独立守护进程与服务端口。所谓「安装」本质是准备好 JDK/构建环境,并把 OpenWebBeans 的 jar 以 classpath 或 Maven 依赖方式引入到你的 Java 工程,然后通过 CDI SE 容器(SeContainerInitializer)启动。

二、前置条件

2.1 更新软件源

sudo apt-get update

2.2 安装 JDK 21 与 Maven

OpenWebBeans 4.x 官方声明支持的最低 Java 版本为 11、当前最新支持版本为 21(见发行包 README),本指南按 JDK 21 实测:

sudo apt-get install -y openjdk-21-jdk-headless maven wget curl unzip

验证 JDK 与 Maven:

/usr/lib/jvm/java-21-openjdk-amd64/bin/java -version
mvn -version

实测回显:

openjdk version "21.0.12.1" 2026-08-18
OpenJDK Runtime Environment (build 21.0.12.1+1-1-22.04.4-Ubuntu)
OpenJDK 64-Bit Server VM (build 21.0.12.1+1-1-22.04.4-Ubuntu, mixed mode, sharing)
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 21.0.12.1, vendor: Ubuntu, runtime: /usr/lib/jvm/java-21-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "6.8.0-138-generic", arch: "amd64", family: "unix"

⚠️ 注意:mvn -version 中 Java version 必须为 21 才表示 Maven 正在使用 JDK 21。若显示 17.0.x,说明默认 JVM 是 JDK 17,请在当前会话先执行:

export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

三、版本选型说明

通过 Apache 官方下载目录探测当前维护版本:

curl -s https://downloads.apache.org/openwebbeans/ | grep -oE 'href="[0-9.]+/"' | tr -d 'href="/'

实测返回:

1.2.8
1.7.6
2.0.28
4.0.3
4.1.1

各主线版本对照如下:

版本实现的规范包命名空间所需 JDK结论
1.2.8CDI 1.0(JSR-299)javax.*JDK 8仅存量兼容,不推荐新用
1.7.6CDI 1.2(JSR-346)javax.*JDK 8仅存量兼容,不推荐新用
2.0.28CDI 2.0(JSR-365)javax.*JDK 8+老应用迁移用 2.x
4.0.3CDI 4.0(Jakarta EE 10)jakarta.*JDK 11+(官方支持至 21)生产首选 4.x
4.1.1CDI 4.0(Jakarta EE 10)jakarta.*JDK 11+(官方支持至 21)当前最新稳定版

💡 版本选择建议:CDI 4.0 与旧版(CDI 1.x/2.x)在 API 上大体向后兼容,但包名从 javax.* 全部迁移为 jakarta.*。新工程一律选 4.1.1;存量 javax.* 工程若无法改造依赖,才退用 2.0.28。本指南全程按 JDK 21 + OpenWebBeans 4.1.1 实测。

4.1.1 的官方发布物(位于 https://downloads.apache.org/openwebbeans/4.1.1/):

文件用途
openwebbeans-distribution-4.1.1-binary.tar.gz二进制分发包(本文方案 A)
openwebbeans-distribution-4.1.1-binary.zip二进制分发包(zip 形态,内容相同)
openwebbeans-4.1.1-source-release.zip官方源码发布包(可自行 mvn package 构建)

四、方案 A:官方二进制分发包安装(推荐)

4.1 下载分发包并校验

cd /tmp
wget -q https://downloads.apache.org/openwebbeans/4.1.1/openwebbeans-distribution-4.1.1-binary.tar.gz
ls -lh openwebbeans-distribution-4.1.1-binary.tar.gz

实测回显:

-rw-r--r-- 1 root root 1.5M Aug  7 16:54 openwebbeans-distribution-4.1.1-binary.tar.gz

计算本地 SHA512 并与官网 .sha512 校验文件核对:

sha512sum openwebbeans-distribution-4.1.1-binary.tar.gz

实测回显:

17d757df5f42e5737a649f46ad00481c09635a74439940a5c6d0cc9f2d39bc265315c7911948005cc125ff0ead9826e1c70075330275ad39251182e9b9a866b7  openwebbeans-distribution-4.1.1-binary.tar.gz

4.2 解压并安装到 /opt/openwebbeans

tar xzf openwebbeans-distribution-4.1.1-binary.tar.gz
mkdir -p /opt/openwebbeans
cp -r openwebbeans-distribution-4.1.1/* /opt/openwebbeans/

4.3 核对目录结构

ls /opt/openwebbeans/

实测回显:

KEYS  LICENSE  NOTICE  README.txt  api  config  install_owb_tomcat7.bat  install_owb_tomcat7.sh  install_owb_tomcat7_myfaces.sh  openwebbeans-impl-4.1.1.jar  plugins  spi  xbean-asm9-shaded-5.0.0.jar  xbean-finder-shaded-5.0.0.jar
路径内容
openwebbeans-impl-4.1.1.jar核心实现(容器、BeanManager、代理生成、扫描)
spi/openwebbeans-spi-4.1.1.jarSPI 接口层
api/jakarta.enterprise.cdi-api-4.1.0.jarCDI 4.1 标准 API(SeContainer/SeContainerInitializer 等)
api/jakarta.annotation-api-3.0.0.jarJakarta 注解 API(@PostConstruct 等)
plugins/openwebbeans-ee / -ee-common / -ejb / -el22 / -jms / -jsf / -osgi / -tomcat / -web 4.1.1.jar各类集成插件(EE/EJB/JMS/JSF/OSGi/Tomcat)
config/openwebbeans.properties默认配置文件(含全部默认参数,详见《配置参数详解》篇)
config/web.xmlWeb 部署示例配置
install_owb_tomcat7.shTomcat 7/8/9 自动安装脚本
xbean-finder-shaded / xbean-asm9-shaded类扫描与字节码增强依赖

4.4 补装 SE 模式运行所需的 API jar

二进制分发包自带 api/ 目录仅含 cdi-api 与 annotation-api;若用 CDI SE 容器(SeContainerInitializer)独立运行,还需 openwebbeans-se-4.1.1.jar(内含 SE 容器 ServiceLoader 注册)、jakarta.inject-api-2.0.1.jar、jakarta.interceptor-api-2.2.0.jar。从 Maven Central 补装:

cd /opt/openwebbeans/api
wget -q https://repo1.maven.org/maven2/org/apache/openwebbeans/openwebbeans-se/4.1.1/openwebbeans-se-4.1.1.jar
wget -q https://repo1.maven.org/maven2/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar
wget -q https://repo1.maven.org/maven2/jakarta/interceptor/jakarta.interceptor-api/2.2.0/jakarta.interceptor-api-2.2.0.jar

💡 说明:这 3 个 jar 在 Maven 方案(见方案 B)下由 Maven 自动传递下载,只有纯手工 classpath 场景需要手动补装。SE 模式完整运行验证见《构建并运行示例应用指南》篇。

五、方案 B:Maven 依赖引入(开发推荐)

OpenWebBeans 官方推荐通过 Maven/Gradle 以依赖方式引入,便于统一版本、传递依赖与打包。本方案从零创建一个 Maven 工程并验证 OpenWebBeans 可用。

5.1 创建 Maven 工程

mkdir -p /root/owb-demo/src/main/java/demo /root/owb-demo/src/main/resources/META-INF

5.2 编写 pom.xml 并引入依赖

openwebbeans-se 提供 CDI SE 容器与 SeContainerInitializer;CDI 4.1 API(jakarta.enterprise.cdi-api)与 jakarta.inject-api 需显式声明(实测 openwebbeans-se 不传递携带 API 包):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>demo</groupId>
    <artifactId>owb-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <owb.version>4.1.1</owb.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.openwebbeans</groupId>
            <artifactId>openwebbeans-se</artifactId>
            <version>${owb.version}</version>
        </dependency>
        <dependency>
            <groupId>jakarta.enterprise</groupId>
            <artifactId>jakarta.enterprise.cdi-api</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>jakarta.inject</groupId>
            <artifactId>jakarta.inject-api</artifactId>
            <version>2.0.1</version>
        </dependency>
    </dependencies>
</project>

⚠️ 注意:openwebbeans-se、openwebbeans-impl、openwebbeans-spi 三个 OpenWebBeans 组件必须同为 4.1.1(由 ${owb.version} 统一)。CDI API 与实现版本要匹配:OWB 4.1.1 对应 jakarta.enterprise.cdi-api 4.1.0(二进制包 api/ 目录即此版本)。

5.3 编译与验证

export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
cd /root/owb-demo
mvn clean compile

实测结果(回显节选):

[INFO] BUILD SUCCESS

Maven 本地仓库 ~/.m2/repository/ 会生成以下依赖:

Artifact作用
openwebbeans-se-4.1.1.jarCDI SE 容器引导(SeContainerInitializer 实现)
openwebbeans-impl-4.1.1.jar核心实现
openwebbeans-spi-4.1.1.jarSPI 接口层
jakarta.enterprise.cdi-api-4.1.0.jarCDI 标准 API
jakarta.inject-api-2.0.1.jar@Inject 等注入注解
xbean-finder-shaded / xbean-asm9-shaded 5.0.0类扫描与字节码处理

实测依赖树(mvn dependency:tree):

demo:owb-demo:jar:1.0-SNAPSHOT
+- org.apache.openwebbeans:openwebbeans-se:jar:4.1.1:compile
|  \- org.apache.openwebbeans:openwebbeans-impl:jar:4.1.1:compile
|     +- org.apache.openwebbeans:openwebbeans-spi:jar:4.1.1:compile
|     +- org.apache.xbean:xbean-finder-shaded:jar:5.0.0:compile
|     \- org.apache.xbean:xbean-asm9-shaded:jar:5.0.0:compile
+- jakarta.enterprise:jakarta.enterprise.cdi-api:jar:4.1.0:compile
|  +- jakarta.enterprise:jakarta.enterprise.lang-model:jar:4.1.0:compile
|  +- jakarta.annotation:jakarta.annotation-api:jar:3.0.0:compile
|  +- jakarta.el:jakarta.el-api:jar:6.0.0:compile
|  \- jakarta.interceptor:jakarta.interceptor-api:jar:2.2.0:compile
\- jakarta.inject:jakarta.inject-api:jar:2.0.1:compile

六、方案选型对比与建议

维度方案 A:二进制分发包方案 B:Maven 依赖
是否需联网需(仅下载时)需(Maven 拉依赖)
离线友好度高(拷入分发包即可)低(需本地仓库预置)
版本管理手工解压覆盖pom 版本号统一
适合场景内网离线、手工 classpath日常开发、工程打包

💡 建议:日常开发用方案 B;内网隔离环境或要手工掌控 classpath 用方案 A。

七、配置说明

OpenWebBeans 以 jar 库形态提供,配置分四层:

  • 默认配置:/opt/openwebbeans/config/openwebbeans.properties(方案 A 安装目录内,与 jar 内置的 META-INF/openwebbeans/openwebbeans.properties 同内容)。
  • classpath 覆盖:在应用的 META-INF/openwebbeans/openwebbeans.properties 写入覆盖项即可生效。
  • 系统属性覆盖:-Dorg.apache.webbeans.scanner.maxThreads=4 优先级高于 classpath 文件。
  • 程序化配置:SeContainerInitializer.addProperty(key, value),优先级最高。

详细参数含义、默认值与生产模板见《Apache OpenWebBeans 4.1.1 配置参数详解》篇。

八、注意事项

⚠️ 注意:

  1. OpenWebBeans 4.x 使用 jakarta.* 包名(CDI 4.0),与旧版 javax.* 不兼容,选型前确认工程依赖。
  2. JDK 21 为官方支持的最新版本,JDK 11 亦可运行;低于 11 无法运行 4.x。
  3. 纯手工 classpath 运行时,SeContainerInitializer 依赖 openwebbeans-se-4.1.1.jar 中的 ServiceLoader 注册(META-INF/services/jakarta.enterprise.inject.se.SeContainerInitializer),缺少该 jar 会报 No valid CDI implementation found(实测复现)。

九、常见问题

Q1:java.lang.IllegalStateException: No valid CDI implementation found? 原因:classpath 上没有 OpenWebBeans 的 SE 容器注册。解决:加入 openwebbeans-se-4.1.1.jar(方案 A 场景手工补装;方案 B 场景检查 openwebbeans-se 依赖是否遗漏)。

Q2:编译报 cannot find symbol(SeContainer、@Inject 等)? 原因:缺少 CDI API 或注入 API。openwebbeans-se 不传递携带 API 包,必须显式声明 jakarta.enterprise.cdi-api 与 jakarta.inject-api(见方案 B 5.2)。

Q3:运行时 NoClassDefFoundError: jakarta/interceptor/InvocationContext? 原因:手工 classpath 场景缺少 jakarta.interceptor-api。解决:按方案 A 4.4 补装 jakarta.interceptor-api-2.2.0.jar。

Q4:downloads.apache.org 无法访问怎么办? 可用 Apache 镜像站(如清华 TUNA mirrors.tuna.tsinghua.edu.cn/apache/openwebbeans/)下载同路径文件,或把分发包拷入内网后按方案 A 安装。

十、卸载方式

若仅移除 Maven 依赖:删除 pom.xml 中相关 <dependency> 并删除本地仓库:

rm -rf ~/.m2/repository/org/apache/openwebbeans
rm -rf /root/owb-demo

若同时移除二进制分发包与 JDK:

sudo rm -rf /opt/openwebbeans
sudo apt-get remove -y openjdk-21-jdk-headless maven
sudo apt-get autoremove -y

十一、参考链接

  • Apache OpenWebBeans 官方下载目录:https://downloads.apache.org/openwebbeans/
  • OpenWebBeans 官网:https://openwebbeans.apache.org/
  • OpenWebBeans 各版本归档:https://archive.apache.org/dist/openwebbeans/
  • Maven Central:https://repo1.maven.org/maven2/org/apache/openwebbeans/