CentOS 8 安装 Apache DeltaSpike 指南

在 CentOS 8 服务器上从零集成 Apache DeltaSpike:安装 JDK 与 Maven、按模块引入 Maven 依赖、编写 Weld SE 最小 CDI 示例并完成真实编译运行与验证,附版本管理与卸载方法。

Apache DeltaSpikeApache DeltaSpike2026/10/11

CentOS 8 安装 Apache DeltaSpike 指南

Apache DeltaSpike 是一组可移植的 CDI(Contexts and Dependency Injection)扩展,面向 Java EE / Jakarta EE 应用,通过 Maven 依赖以库的形式引入,无独立守护进程。本文在 CentOS 8 服务器上完成从环境准备、模块依赖引入到最小 CDI 示例端到端运行的完整过程。

一、适用场景与前置条件

1.1 组件定位

DeltaSpike 由若干独立模块组成,均以 org.apache.deltaspike.* 坐标发布:

  • deltaspike-core-api / deltaspike-core-impl:配置、国际化、BeanProvider 等核心能力。
  • deltaspike-cdictrl-weld:以编程方式启动/关闭轻量 CDI 运行时。
  • deltaspike-data-module-*:JPA 仓储(Repository)扩展。
  • deltaspike-jsf-module-*、deltaspike-scheduler-module-* 等:按需引入。

1.2 环境要求

项目要求
操作系统CentOS Linux release 8.x
JDK8 或 11
构建工具Maven 3.5+
网络可访问 Maven Central(repo1.maven.org)

本文实测环境:CentOS Linux release 8.4.2105,默认 JDK 1.8.0_312,附加 java-11-openjdk 11.0.13.0.8,Maven 3.5.4。

二、JDK 与 Maven 安装

2.1 安装 JDK

CentOS 8 自带仓库可直接安装 OpenJDK:

dnf -y install java-11-openjdk-devel

安装后确认默认 java 指向的版本(系统可能同时保留 JDK 8):

java -version

真实回显:

openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)

如倾向于使用 JDK 11,可切换 alternatives:

alternatives --config java

2.2 安装 Maven

dnf -y install maven
mvn -version

真实回显:

Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 1.8.0_312, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre

2.3 版本验证

java -version 2>&1 | head -1
mvn -v 2>&1 | head -1

任一命令正常输出版本号即代表 JDK 与 Maven 就绪。

三、DeltaSpike 模块依赖引入

3.1 可用版本核对

引入前先确认中央仓库可用版本:

curl -s https://repo1.maven.org/maven2/org/apache/deltaspike/core/deltaspike-core-api/maven-metadata.xml \
  | grep -oE '<version>[^<]+</version>' | tail -5

回显(节选):

<version>1.9.4</version>
<version>1.9.5</version>
<version>1.9.6</version>
<version>2.0.0</version>
<version>2.0.1</version>

1.9.x 系列使用 javax.* 命名空间,兼容 JDK 8/11;本文选用 1.9.6。

3.2 Maven 坐标清单

模块groupIdartifactId说明
核心 APIorg.apache.deltaspike.coredeltaspike-core-api编译期注解与接口
核心实现org.apache.deltaspike.coredeltaspike-core-impl运行时实现(runtime)
运行时控制org.apache.deltaspike.cdictrldeltaspike-cdictrl-weldWeld 运行时引导
轻量 CDI 运行时org.jboss.weld.seweld-se-coreSE 环境 CDI 实现

3.3 版本管理

在 pom.xml 中集中声明版本,避免逐条写死:

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
  <deltaspike.version>1.9.6</deltaspike.version>
  <weld.version>3.1.9.Final</weld.version>
</properties>

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.apache.deltaspike.core</groupId>
      <artifactId>deltaspike-core-api</artifactId>
      <version>${deltaspike.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.deltaspike.core</groupId>
      <artifactId>deltaspike-core-impl</artifactId>
      <version>${deltaspike.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.deltaspike.cdictrl</groupId>
      <artifactId>deltaspike-cdictrl-weld</artifactId>
      <version>${deltaspike.version}</version>
    </dependency>
  </dependencies>
</dependencyManagement>

3.4 创建示例工程

mkdir -p /root/deltaspike-demo/src/main/java/com/example
mkdir -p /root/deltaspike-demo/src/main/resources/META-INF

pom.xml:

<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>com.example</groupId>
  <artifactId>deltaspike-demo</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <deltaspike.version>1.9.6</deltaspike.version>
    <weld.version>3.1.9.Final</weld.version>
    <exec.mainClass>com.example.App</exec.mainClass>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.apache.deltaspike.core</groupId>
      <artifactId>deltaspike-core-api</artifactId>
      <version>${deltaspike.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.deltaspike.core</groupId>
      <artifactId>deltaspike-core-impl</artifactId>
      <version>${deltaspike.version}</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.deltaspike.cdictrl</groupId>
      <artifactId>deltaspike-cdictrl-weld</artifactId>
      <version>${deltaspike.version}</version>
    </dependency>
    <dependency>
      <groupId>org.jboss.weld.se</groupId>
      <artifactId>weld-se-core</artifactId>
      <version>${weld.version}</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
          <mainClass>${exec.mainClass}</mainClass>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

四、最小 CDI 示例编译运行

4.1 编写代码与配置

src/main/resources/META-INF/beans.xml:

<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2.0.xsd"
       bean-discovery-mode="all" version="2.0"/>

src/main/resources/META-INF/apache-deltaspike.properties:

app.greeting=Hello DeltaSpike
app.name=Apache DeltaSpike
app.version=1.9.6

src/main/java/com/example/GreetingService.java:

package com.example;

import javax.inject.Inject;
import javax.inject.Named;
import org.apache.deltaspike.core.api.config.ConfigProperty;
import org.apache.deltaspike.core.api.config.ConfigResolver;

@Named
public class GreetingService {

    @Inject
    @ConfigProperty(name = "app.greeting", defaultValue = "Hi")
    private String greeting;

    @Inject
    @ConfigProperty(name = "app.name")
    private String name;

    public void run() {
        System.out.println("[DeltaSpike] app.greeting = " + greeting);
        System.out.println("[DeltaSpike] app.name     = " + name);
        System.out.println("[DeltaSpike] ConfigResolver app.version = "
                + ConfigResolver.getPropertyValue("app.version", "unknown"));
    }
}

src/main/java/com/example/App.java:

package com.example;

import org.apache.deltaspike.core.api.provider.BeanProvider;
import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;

public class App {
    public static void main(String[] args) {
        Weld weld = new Weld();
        WeldContainer container = weld.initialize();
        try {
            BeanProvider.getContextualReference(GreetingService.class).run();
        } finally {
            container.shutdown();
        }
    }
}

4.2 编译

cd /root/deltaspike-demo && mvn -q -B compile

退出码为 0、无报错即编译成功。若需限制构建 JVM 内存,可使用:

export MAVEN_OPTS="-Xms256m -Xmx512m"

4.3 运行与真实回显

cd /root/deltaspike-demo && mvn -B exec:java

真实回显(节选):

INFO: Custom config found by DeltaSpike. Name: 'META-INF/apache-deltaspike.properties', URL: 'file:/root/deltaspike-demo/target/classes/META-INF/apache-deltaspike.properties'
INFO: Computed the following DeltaSpike ProjectStage: Production
INFO: WELD-ENV-002003: Weld SE container ... initialized
[DeltaSpike] app.greeting = Hello DeltaSpike
[DeltaSpike] app.name     = Apache DeltaSpike
[DeltaSpike] ConfigResolver app.version = 1.9.6
INFO: WELD-ENV-002001: Weld SE container ... shut down
[INFO] BUILD SUCCESS

至此,CentOS 8 上 DeltaSpike 的核心配置注入能力已端到端跑通。

五、版本验证与依赖确认

查看实际解析到的坐标与传递依赖:

cd /root/deltaspike-demo && mvn -B dependency:tree \
  | grep -E 'org.apache.deltaspike|org.jboss.weld'

真实回显:

[INFO] +- org.apache.deltaspike.core:deltaspike-core-api:jar:1.9.6:compile
[INFO] +- org.apache.deltaspike.core:deltaspike-core-impl:jar:1.9.6:runtime
[INFO] +- org.apache.deltaspike.cdictrl:deltaspike-cdictrl-weld:jar:1.9.6:compile
[INFO] |  \- org.apache.deltaspike.cdictrl:deltaspike-cdictrl-api:jar:1.9.6:compile
[INFO] \- org.jboss.weld.se:weld-se-core:jar:3.1.9.Final:compile

六、卸载

删除示例工程与本地仓库缓存:

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

如需移除 JDK / Maven:

dnf remove -y java-11-openjdk-devel maven

七、常见问题

Q1:mvn 报 Cannot find matching toolchain 或使用了非预期 JDK?

执行 alternatives --config java 选择目标 JDK,再通过 echo $JAVA_HOME 确认;也可在构建时显式指定。

Q2:@ConfigProperty 注入为 null?

确认 META-INF/apache-deltaspike.properties 位于运行时 classpath(target/classes/META-INF/),并检查键名拼写与 @ConfigProperty(name=...) 一致,必要时给出 defaultValue。

Q3:出现大量 WELD-001478 ... only be invoked in the @Priority part of the chain 告警?

这是 Weld 对 DeltaSpike 内置拦截器优先级的提示性告警,不影响运行结果,可忽略。