CentOS 8 安装 Apache Commons RDF 指南

在 CentOS 8(EOL 归档源)上从零安装 Apache Commons RDF 0.5.0,覆盖阿里云 vault 归档源配置、java-17-openjdk 与 Maven 安装、显式 JAVA_HOME、Maven 依赖与中央仓库 jar 直跑两种方案、sha1 校验与卸载清理,命令回显均实测通过。

Apache Commons RDFApache Commons RDF2026/10/15

CentOS 8 安装 Apache Commons RDF 指南

目标:在 CentOS 8(已停止维护的 EOL 系统)上从零搭建 Apache Commons RDF 0.5.0 的开发与运行环境(java-17-openjdk + Maven 3.5.4),跑通 IRI/Literal/Graph 的最小验证程序,并给出 Maven 依赖与中央仓库 jar 直跑两种落地方式;本文全部命令与回显均已在 CentOS 8 实测通过。

CentOS 8 已于 2021-12-31 停止官方维护(EOL),系统内置的官方软件源已下线,安装 JDK/Maven 必须改用历史归档源。Apache Commons RDF 是 RDF 1.1 门面库:只定义 Graph、Triple、IRI、Literal、BlankNode、Dataset 等接口,能力由绑定实现提供(simple 内存实现或 Jena/RDF4J 绑定)。它是纯 Java 库,安装的本质是「配置可用软件源 → 装 JDK/构建工具 → 引入依赖 → 跑最小验证程序」。与 Ubuntu 不同,CentOS 8 的 Maven 在多 JDK 共存时必须显式设置 JAVA_HOME,本文实测给出了不设置时的实际后果。版本方面与《Ubuntu 22.04 安装 Apache Commons RDF 指南》一致:最新发布版为 2017-12-23 的 0.5.0,官方仅发源码包,二进制从 Maven 中央仓库获取。

一、环境信息

本节固定可复现的基线环境。实测系统的发布小版本与归档源版本不完全一致(8.4 基线系统 + 8.5.2111 归档源),如实记录如下,包版本以实测 NEVRA 为准。

  • 操作系统:CentOS Linux 8.4.2105(/etc/centos-release 实测,系统基线小版本)
  • 软件源:阿里云归档仓库 https://mirrors.aliyun.com/centos-vault/8.5.2111/(BaseOS + AppStream,8.5.2111 才收录 java-17-openjdk)
  • 架构:x86_64
  • JDK:java-17-openjdk 17.0.1(java-17-openjdk-1:17.0.1.0.12-2.el8_5)
  • 构建工具:Apache Maven 3.5.4(Red Hat 发行版 maven-1:3.5.4-5.module_el8.0.0+39+6a9b6e22)
  • 组件版本:commons-rdf-api 0.5.0 + commons-rdf-simple 0.5.0(解析/序列化另需 commons-rdf-jena 0.5.0)
  • 官方下载目录:https://downloads.apache.org/commons/rdf/(实测仅 source 包)
  • Maven 坐标:org.apache.commons:commons-rdf-api:0.5.0、org.apache.commons:commons-rdf-simple:0.5.0
  • 验证用工作目录:/root/rdf-min(Maven 工程)、/root/rdf-centos-jarrun(jar 直跑)

系统与架构确认(实时回显):

cat /etc/centos-release
CentOS Linux release 8.4.2105
uname -m
x86_64

💡 说明:系统基线(8.4.2105)与归档源版本(8.5.2111)可以不一致——归档仓库中的包以自身版本号(如 el8_5)标识,可安装在旧小版本系统上;若希望两者一致,可先 dnf update -y centos-linux-release 把系统升到 8.5.2111,再执行后文安装步骤,实测非必需。

二、前置条件

本节说明安装前必须满足的条件。CentOS 8 的特殊性在于:官方源已下线,必须先配置归档源才能安装任何软件包。

  1. 具有 root 权限的 CentOS 8 系统。
  2. 可访问 Maven 中央仓库 repo1.maven.org(实测直连可达)。
  3. 可访问一个 CentOS 8 归档源。实测本网络直连 vault.centos.org 被拒绝(HTTP 403),因此改用阿里云归档镜像:
curl -sI --max-time 15 https://vault.centos.org/8.5.2111/ | head -1
HTTP/2 403
curl -sI --max-time 20 https://mirrors.aliyun.com/centos-vault/8.5.2111/ | head -1
HTTP/1.1 200 OK
  1. 至少 2 GB 可用磁盘空间(JDK + Maven + 依赖合计约 600 MB)。

⚠️ 注意:vault.centos.org 是 CentOS 官方归档,但部分地区网络对其限流或直接 403;阿里云镜像同步同一套 8.5.2111 仓库,包内容一致,仅路径前缀不同。

三、版本选型说明

本节回答「装哪个版本、装哪些模块」。Commons RDF 是低频发布项目,选型结论需以实际查询为准,这里给出与官方下载站、中央仓库一致的实测证据。

官方下载目录 https://downloads.apache.org/commons/rdf/ 下只有 source/ 与 RELEASE-NOTES.txt,binaries/ 目录实测为空,即官方不提供二进制包。source/ 目录实测内容:

curl -s --max-time 30 https://downloads.apache.org/commons/rdf/source/ | grep -oE "apache-commons-rdf-[0-9.]+[^\"< ]*" | sort -u
apache-commons-rdf-0.5.0-source-release.zip
apache-commons-rdf-0.5.0-source-release.zip.asc
apache-commons-rdf-0.5.0-source-release.zip.sha256

发布说明 RELEASE-NOTES.txt 实测开头:

curl -s --max-time 30 https://downloads.apache.org/commons/rdf/RELEASE-NOTES.txt | head -5
# Apache Commons RDF

## 0.5.0 (2017-12-23)

This is the first release after graduation. Although there are not API changes
nor big improvements, it updates different core aspects and dependencies.

Maven 中央仓库的版本谱系实测(maven-metadata.xml 原文):

curl -s --max-time 30 https://repo1.maven.org/maven2/org/apache/commons/commons-rdf-api/maven-metadata.xml
<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-rdf-api</artifactId>
  <versioning>
    <latest>0.5.0</latest>
    <release>0.5.0</release>
    <versions>
      <version>0.1.0-incubating</version>
      <version>0.2.0-incubating</version>
      <version>0.3.0-incubating</version>
      <version>0.5.0</version>
    </versions>
    <lastUpdated>20171223012405</lastUpdated>
  </versioning>
</metadata>
版本线最新版发布时间状态
0.1.0 / 0.2.0 / 0.3.0-incubating孵化器版本2014~2015已过时,不建议新用
0.5.0(毕业后续版本)0.5.02017-12-23Maven Central latest/release,本文采用

模块清单与绑定实现选型(0.5.0 实测坐标):

模块Maven 坐标角色传递依赖
APIorg.apache.commons:commons-rdf-api接口定义 jar,零第三方依赖无
Simpleorg.apache.commons:commons-rdf-simple纯内存参考实现仅 api
Jena 绑定org.apache.commons:commons-rdf-jena绑定 Jena 3.5.0,提供解析/序列化api、simple、jena-osgi 3.5.0 等
RDF4J 绑定org.apache.commons:commons-rdf-rdf4j绑定 RDF4J 2.2.2api、rdf4j-model 等
JSON-LDorg.apache.commons:commons-rdf-jsonld-javaJSON-LD 解析适配api、jsonld-java 0.11.1

维护状态如实说明:0.5.0 之后官方再无新版本(Maven Central lastUpdated=20171223012405),项目处于低频/停滞维护状态;接口面向 RDF 1.1 规范,能力面窄而稳定,演进由底层绑定承担。本文实际采用 0.5.0:它是中央仓库 latest/release 的最终版本,字节码主版本号实测为 52(Java 8),在本文的 java-17-openjdk 17.0.1 与 JDK 8(Temurin 1.8.0_504)上均实测可运行。

💡 技术拓展:Java 生态里做 RDF 的主流方案对比如下——

方案定位特点适用场景
Commons RDFRDF 1.1 API 门面(接口层)统一抽象,实现可插拔,API 面窄希望与具体 RDF 库解耦的项目
Apache Jena全功能 RDF/SPARQL 框架解析/存储/推理/SPARQL 查询一站式需要完整 RDF 平台与查询能力
Eclipse RDF4JRDF 存储/查询框架Repository API、Sail 存储层需要 RDF 数据库与存储后端集成
JSON-LD Java单一格式解析库只做 JSON-LD仅处理 JSON-LD 的轻场景

本文采用 Commons RDF API + simple 内存实现做入门与验证;涉及解析/序列化时引入 jena 绑定。

版本确认为 0.5.0 的实测回显:

curl -s --max-time 30 https://repo1.maven.org/maven2/org/apache/commons/commons-rdf-api/maven-metadata.xml | grep -oE "<(latest|release)>[^<]+</(latest|release)>"
<latest>0.5.0</latest>
<release>0.5.0</release>

四、方案 A:Maven 依赖安装(在线,推荐)

本节面向常规 Java 项目开发:配置归档源 → dnf 安装 JDK 17 与 Maven → 显式 JAVA_HOME → 引入 commons-rdf 依赖并跑通最小验证程序。

4.1 配置 CentOS 8.5.2111 归档源

CentOS 8 EOL 后内置源已下线,先备份并替换仓库配置,指向阿里云归档镜像:

mkdir -p /etc/yum.repos.d/backup && mv /etc/yum.repos.d/CentOS-*.repo /etc/yum.repos.d/backup/

写入归档源配置(文件路径 /etc/yum.repos.d/vault.repo):

[BaseOS-vault]
name=CentOS-8.5.2111 - BaseOS
baseurl=https://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/x86_64/os/
gpgcheck=0
enabled=1

[AppStream-vault]
name=CentOS-8.5.2111 - AppStream
baseurl=https://mirrors.aliyun.com/centos-vault/8.5.2111/AppStream/x86_64/os/
gpgcheck=0
enabled=1

重建元数据缓存:

dnf makecache
# 输出节选(实测首尾)
CentOS-8.5.2111 - AppStream                       22 MB/s |  8.2 MB     00:00
CentOS-8.5.2111 - BaseOS                          20 MB/s |  4.6 MB     00:00
Metadata cache created.

验证点:Metadata cache created. 且无 Errors during downloading metadata,说明两个归档仓库可用。

4.2 安装 JDK 17 与 Maven

dnf install -y java-17-openjdk java-17-openjdk-devel maven
# 输出节选(实测首尾)
Installing:
 maven                    noarch  1:3.5.4-5.module_el8.0.0+39+6a9b6e22  appstream  27 k
 java-17-openjdk          x86_64  1:17.0.1.0.12-2.el8_5                 appstream  238 k
 java-17-openjdk-devel    x86_64  1:17.0.1.0.12-2.el8_5                 appstream  4.4 M
Installed products updated.
Complete!

确认已安装的包版本:

rpm -q java-17-openjdk maven && ls /usr/lib/jvm/
java-17-openjdk-1:17.0.1.0.12-2.el8_5.x86_64
maven-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch
java-1.8.0-openjdk
java-1.8.0-openjdk-1.8.0.312.b07-2.el8_4.x86_64
jre-8
java-17-openjdk
java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64
jre-17

解读:/usr/lib/jvm/ 同时出现 1.8.0 与 17.0.1——前者是 dnf install maven 连带引入的依赖包(javapackages-tools 体系),后者才是本文使用的 JDK。多 JDK 共存正是 4.3 节必须显式设置 JAVA_HOME 的原因。

4.3 显式设置 JAVA_HOME 并验证 Maven

写入全局环境变量(文件路径 /etc/profile.d/java17.sh):

cat > /etc/profile.d/java17.sh <<'EOF'
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH
EOF
source /etc/profile.d/java17.sh

验证 java 与 Maven 绑定:

java -version
openjdk version "17.0.1" 2021-10-19 LTS
OpenJDK Runtime Environment 21.9 (build 17.0.1+12-LTS)
OpenJDK 64-Bit Server VM 21.9 (build 17.0.1+12-LTS, mixed mode, sharing)
mvn -version | head -3
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 17.0.1, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-17-openjdk

验证点:mvn -version 的 Java version 一行必须显示 17.0.1 且 runtime 指向 /usr/lib/jvm/java-17-openjdk。若不加 JAVA_HOME,实测 Maven 会退回 1.8(见下):

env -u JAVA_HOME -u PATH bash -c 'mvn -version 2>&1 | head -3'
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_4.x86_64/jre

⚠️ 注意:CentOS 8 的 Maven 与 Ubuntu 不同,JAVA_HOME 未设置时不会自动选用最高版本 JDK,实测直接绑定 java 1.8.0_312,后续按 release=17 编译会报「无效的目标发行版」。JAVA_HOME 必须显式设置并生效。

4.4 创建工程并引入依赖

与 Ubuntu 一致:建最小 Maven 工程 rdf-min,pom 声明 api 与 simple 两个依赖。

mkdir -p /root/rdf-min/src/main/java

pom.xml(完整内容,文件路径 /root/rdf-min/pom.xml):

<?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>rdf-min</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.release>17</maven.compiler.release>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-rdf-api</artifactId>
      <version>0.5.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-rdf-simple</artifactId>
      <version>0.5.0</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
      </plugin>
    </plugins>
  </build>
</project>

逐项说明关键配置:

  • maven.compiler.release=17:0.5.0 自身是 Java 8 字节码(major 52),JDK 8 环境把该值改回 8 即可。
  • maven-compiler-plugin 固定 3.11.0:CentOS 8 的 Maven 3.5.4 默认绑定 3.5.1 插件,不认识 release 属性,会按 source/target=1.5 编译并被 JDK 17 拒绝。
  • commons-rdf-api + commons-rdf-simple:入门最小组合,实测合计零第三方传递依赖(见 4.6 节依赖树)。

最小验证程序 TermsCheck.java(文件路径 /root/rdf-min/src/main/java/TermsCheck.java):

import org.apache.commons.rdf.api.Graph;
import org.apache.commons.rdf.api.IRI;
import org.apache.commons.rdf.api.Literal;
import org.apache.commons.rdf.api.RDF;
import org.apache.commons.rdf.api.Triple;
import org.apache.commons.rdf.simple.SimpleRDF;

public class TermsCheck {
    public static void main(String[] args) {
        RDF rdf = new SimpleRDF();
        IRI alice = rdf.createIRI("http://example.org/people/alice");
        IRI name = rdf.createIRI("http://xmlns.com/foaf/0.1/name");
        Literal aliceName = rdf.createLiteral("Alice");
        Graph g = rdf.createGraph();
        g.add(alice, name, aliceName);
        System.out.println("size=" + g.size());
        for (Triple t : g.iterate()) {
            System.out.println(t.getSubject().ntriplesString() + " "
                    + t.getPredicate().ntriplesString() + " "
                    + t.getObject().ntriplesString());
        }
        System.out.println("commons-rdf OK: " + rdf.getClass().getName());
    }
}

💡 技术拓展:RDF 数据模型只有三种节点(IRI、Literal、BlankNode),一条三元组就是「主语-谓语-宾语」三个节点的组合,谓语必须是 IRI。上例语义是「alice 的名字是 Alice」,http://xmlns.com/foaf/0.1/name 是 FOAF 词表的「姓名」属性 IRI。RDF 把一切数据拆成这种最小陈述,便于跨数据集合并与全局链接。

4.5 编译与运行验证

编译并确认依赖树:

source /etc/profile.d/java17.sh
cd /root/rdf-min && mvn -B clean compile 2>&1 | tail -9
[INFO] --- maven-compiler-plugin:3.11.0:compile (default-compile) @ rdf-min ---
[INFO] Changes detected - recompiling the module! :source
[INFO] Compiling 1 source file with javac [debug release 17] to target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.866 s
[INFO] Finished at: 2026-10-15T03:03:39Z
[INFO] ------------------------------------------------------------------------
cd /root/rdf-min && mvn -B dependency:tree 2>&1 | grep -E "rdf-min:jar|commons-rdf"
[INFO] demo:rdf-min:jar:1.0.0
[INFO] +- org.apache.commons:commons-rdf-api:jar:0.5.0:compile
[INFO] \- org.apache.commons:commons-rdf-simple:jar:0.5.0:compile

解读:依赖树只有 api 与 simple 两个节点,无任何额外传递依赖。运行验证:

cd /root/rdf-min
mvn -q -B dependency:build-classpath -Dmdep.outputFile=cp.txt
CP=$(cat cp.txt)
java -Dfile.encoding=UTF-8 -cp target/classes:$CP TermsCheck
size=1
<http://example.org/people/alice> <http://xmlns.com/foaf/0.1/name> "Alice"
commons-rdf OK: org.apache.commons.rdf.simple.SimpleRDF

结果解读:三行输出与 Ubuntu 侧完全一致,说明 commons-rdf 0.5.0 已在 CentOS 8 + java-17-openjdk 上完整可用。

💡 说明:新开终端会话务必保证 JAVA_HOME 已生效(重登 shell 或 source /etc/profile.d/java17.sh),否则构建会退回 java 1.8 并报编译错误。

五、方案 B:Maven Central jar 直跑(离线友好)

本节面向没有 Maven/构建体系的场景。官方不发布二进制包,二进制 jar 统一从 Maven 中央仓库获取,用 javac + java 完成编译运行。

5.1 方案说明

链路:从 repo1.maven.org 下载 api 与 simple 两个 jar → 校验 sha1 → javac -cp 编译 → java -cp 运行。两个 jar 即完整运行期依赖,适合离线脚本化部署。CentOS 8 最小安装不带 curl,先补装:

dnf install -y curl
# 输出节选(实测首尾)
Installing:
 curl                   x86_64  7.61.1-34.el8_6.3  baseos  352 k
Installed products updated.
Complete!

5.2 下载与完整性校验

mkdir -p /root/rdf-centos-jarrun && cd /root/rdf-centos-jarrun
curl -sO --max-time 60 https://repo1.maven.org/maven2/org/apache/commons/commons-rdf-api/0.5.0/commons-rdf-api-0.5.0.jar
curl -sO --max-time 60 https://repo1.maven.org/maven2/org/apache/commons/commons-rdf-simple/0.5.0/commons-rdf-simple-0.5.0.jar
ls -l *.jar
-rw-r--r-- 1 root root 22565 Oct 15 03:05 commons-rdf-api-0.5.0.jar
-rw-r--r-- 1 root root 36267 Oct 15 03:05 commons-rdf-simple-0.5.0.jar

校验 sha1(期望值与实测值必须逐字一致):

cd /root/rdf-centos-jarrun
curl -sO --max-time 30 https://repo1.maven.org/maven2/org/apache/commons/commons-rdf-api/0.5.0/commons-rdf-api-0.5.0.jar.sha1
echo "期望: $(cat commons-rdf-api-0.5.0.jar.sha1)"
echo "实测: $(sha1sum commons-rdf-api-0.5.0.jar | awk '{print $1}')"
期望: df2d4451dee5b311cb4f51ced214dfaab5838291
实测: df2d4451dee5b311cb4f51ced214dfaab5838291

⚠️ 注意:若 sha1 不一致,删除后重新下载;切勿跳过校验直接使用。

5.3 javac 编译与 java 运行

cd /root/rdf-centos-jarrun
source /etc/profile.d/java17.sh
cp /root/rdf-min/src/main/java/TermsCheck.java .
javac -encoding UTF-8 -cp commons-rdf-api-0.5.0.jar:commons-rdf-simple-0.5.0.jar -d out TermsCheck.java
java -Dfile.encoding=UTF-8 -cp out:commons-rdf-api-0.5.0.jar:commons-rdf-simple-0.5.0.jar TermsCheck
size=1
<http://example.org/people/alice> <http://xmlns.com/foaf/0.1/name> "Alice"
commons-rdf OK: org.apache.commons.rdf.simple.SimpleRDF

验证点:javac 无报错、java -cp 一行打印三行结果且无 NoClassDefFoundError,说明 api + simple 两个 jar 即完整组合。

官方源码包(可选):从 https://downloads.apache.org/commons/rdf/source/apache-commons-rdf-0.5.0-source-release.zip 下载(约 555 KB),解压后为完整 Maven 多模块工程。

六、方案对比与选择建议

维度方案 A:Maven 依赖方案 B:中央仓库 jar 直跑
运行期依赖Maven 自动解析手工把 jar 放入 classpath
是否联网首次构建需联网仅下载时需要联网
依赖版本管控pom 统一声明,可锁版本无,靠文件命名区分
多依赖协同(传递依赖)自动处理(如 jena 绑定十余个 jar)需手工收集,仅适合 api+simple 组合
可复现产物mvn package 产出 jarjavac 产出 class + 引用 jar
适用场景常规工程开发离线脚本、临时验证、无构建体系

选型建议:有构建体系一律方案 A,后续用 jena/rdf4j 绑定时传递依赖必须交给 Maven;无构建工具的老旧服务器临时验证选方案 B。两者可共存——方案 A 开发、方案 B 分发最小组合。

七、配置说明

Commons RDF 是库而非服务,没有独立配置文件,全部行为通过代码参数或 JDK 环境变量控制。CentOS 8 下真正必须配置的是 JAVA_HOME。

环境变量 JAVA_HOME(本环境实测默认为空,必须显式设置):

echo "JAVA_HOME=$JAVA_HOME"
JAVA_HOME=

设置并持久化(文件 /etc/profile.d/java17.sh,见 4.3 节):

source /etc/profile.d/java17.sh && echo "JAVA_HOME=$JAVA_HOME"
JAVA_HOME=/usr/lib/jvm/java-17-openjdk

逐项说明:

  • JAVA_HOME:CentOS 8 的 Maven 定位 JDK 的关键变量。实测未设置时 Maven 绑定到 java 1.8.0_312(4.3 节回显),导致 release=17 编译失败;设置后正确绑定 17.0.1。这是 CentOS 8 与 Ubuntu 在 Commons RDF 安装上最大的差异点。
  • 运行期 classpath:api + simple 两个 jar 即完整组合(5.3 节实测);引入 jena 绑定后必须由 Maven 带全 jena-osgi 等十余个 jar。
  • 代码级「参数」:语言标签(自动小写化)、数据类型 IRI、工厂实例范围等均通过 API 入参控制,细节见《Apache Commons RDF 0.5.0 常用 API 与图操作详解》。

八、常见问题(FAQ)

Q1:dnf makecache 报 Failed to download metadata for repo 'appstream'? CentOS 8 EOL 后内置源 mirror.centos.org 已下线。解决:按 4.1 节把仓库指向阿里云 8.5.2111 归档镜像;本网络直连 vault.centos.org 实测 403,故统一用阿里云。

Q2:mvn -version 显示 Java version: 1.8.0_312,编译报「无效的目标发行版: 17」? Maven 未感知 JDK 17。实测 CentOS 8 的 Maven 在 JAVA_HOME 为空时绑定 java 1.8.0_312(4.3 节回显)。解决:export JAVA_HOME=/usr/lib/jvm/java-17-openjdk 并写入 /etc/profile.d/java17.sh 持久化,mvn -version 看到 runtime: /usr/lib/jvm/java-17-openjdk 才算生效。

Q3:Maven 3.5.4 太老,能编译 release=17 的工程吗? 能,但必须固定 maven-compiler-plugin 到 3.11.0(4.4 节 pom)。Maven 3.5.4 默认绑定的 3.5.1 插件不认识 release 属性;3.11.0 插件只要求 Maven 3.2.5 及以上,实测与 3.5.4 兼容良好。

Q4:系统是 8.4.2105,装 8.5.2111 源里的包有冲突吗? 实测无冲突。归档仓库的包以自身 NEVRA 标识(如 java-17-openjdk-1:17.0.1.0.12-2.el8_5),el8_5 包可安装在 8.4 基线系统上;若追求完全一致,可先 dnf update -y 升级系统至 8.5.2111 再安装,非必需。

Q5:中文输出乱码? 运行时加 -Dfile.encoding=UTF-8(本文所有 java 命令均已带上),或 export LANG=C.UTF-8。

Q6:commons-rdf 0.5.0 能跑在 JDK 8 上吗? 可以,实测字节码主版本号 52(Java 8),并在 Temurin 1.8.0_504 上完成编译运行验证;CentOS 8 自带的 java-1.8.0-openjdk 1.8.0.312 同理可用(把 pom 的 release 改为 8)。

九、卸载与清理

Commons RDF 本身不产生系统级安装,卸载即移除依赖与本地文件。

移除验证工程与下载的 jar:

rm -rf /root/rdf-min /root/rdf-centos-jarrun
ls /root/rdf-min 2>&1
ls: cannot access '/root/rdf-min': No such file or directory

移除 Maven 本地仓库中的 commons-rdf(影响所有工程,慎用):

rm -rf $HOME/.m2/repository/org/apache/commons/commons-rdf-api \
       $HOME/.m2/repository/org/apache/commons/commons-rdf-simple

卸载 JDK 17 与 Maven(仅当不再需要)。先以 --assumeno 预演确认,无误后真正执行:

dnf remove --assumeno java-17-openjdk java-17-openjdk-devel maven
# 输出节选(实测首尾)
Removing:
 java-17-openjdk                           x86_64  1:17.0.1.0.12-2.el8_5                         @AppStream-vault  702 k
 java-17-openjdk-devel                     x86_64  1:17.0.1.0.12-2.el8_5                         @AppStream-vault  8.9 M
 maven                                     noarch  1:3.5.4-5.module_el8.0.0+39+6a9b6e22          @AppStream-vault  3.1 k
Removing unused dependencies:
 abattis-cantarell-fonts                   noarch  0.0.25-6.el8                                  @AppStream-vault  295 k
dnf remove -y java-17-openjdk java-17-openjdk-devel maven && dnf autoremove -y

恢复官方源(如需回到 EOL 前的仓库配置):把 4.1 节备份移回原位并删除 vault.repo:

mv /etc/yum.repos.d/backup/CentOS-*.repo /etc/yum.repos.d/ && rm -f /etc/yum.repos.d/vault.repo && rm -f /etc/profile.d/java17.sh

十、参考链接

  1. Apache Commons RDF 官方主页:https://commons.apache.org/proper/commons-rdf/
  2. Apache Commons RDF 官方下载目录(仅源码包):https://downloads.apache.org/commons/rdf/
  3. Commons RDF 0.5.0 发布说明:https://downloads.apache.org/commons/rdf/RELEASE-NOTES.txt
  4. Commons RDF Javadoc(API):https://commons.apache.org/proper/commons-rdf/javadocs/api-0.5.0/
  5. Maven 中央仓库坐标页:https://repo1.maven.org/maven2/org/apache/commons/commons-rdf-api/
  6. 阿里云 CentOS 归档镜像:https://mirrors.aliyun.com/centos-vault/
  7. CentOS 8 生命周期公告(EOL 说明):https://www.centos.org/centos-linux-eol/