CentOS 8 安装 Apache Commons RDF 指南
在 CentOS 8(EOL 归档源)上从零安装 Apache Commons RDF 0.5.0,覆盖阿里云 vault 归档源配置、java-17-openjdk 与 Maven 安装、显式 JAVA_HOME、Maven 依赖与中央仓库 jar 直跑两种方案、sha1 校验与卸载清理,命令回显均实测通过。
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 的特殊性在于:官方源已下线,必须先配置归档源才能安装任何软件包。
- 具有 root 权限的 CentOS 8 系统。
- 可访问 Maven 中央仓库
repo1.maven.org(实测直连可达)。 - 可访问一个 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
- 至少 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.0 | 2017-12-23 | Maven Central latest/release,本文采用 |
模块清单与绑定实现选型(0.5.0 实测坐标):
| 模块 | Maven 坐标 | 角色 | 传递依赖 |
|---|---|---|---|
| API | org.apache.commons:commons-rdf-api | 接口定义 jar,零第三方依赖 | 无 |
| Simple | org.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.2 | api、rdf4j-model 等 |
| JSON-LD | org.apache.commons:commons-rdf-jsonld-java | JSON-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 RDF RDF 1.1 API 门面(接口层) 统一抽象,实现可插拔,API 面窄 希望与具体 RDF 库解耦的项目 Apache Jena 全功能 RDF/SPARQL 框架 解析/存储/推理/SPARQL 查询一站式 需要完整 RDF 平台与查询能力 Eclipse RDF4J RDF 存储/查询框架 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 产出 jar | javac 产出 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
十、参考链接
- Apache Commons RDF 官方主页:https://commons.apache.org/proper/commons-rdf/
- Apache Commons RDF 官方下载目录(仅源码包):https://downloads.apache.org/commons/rdf/
- Commons RDF 0.5.0 发布说明:https://downloads.apache.org/commons/rdf/RELEASE-NOTES.txt
- Commons RDF Javadoc(API):https://commons.apache.org/proper/commons-rdf/javadocs/api-0.5.0/
- Maven 中央仓库坐标页:https://repo1.maven.org/maven2/org/apache/commons/commons-rdf-api/
- 阿里云 CentOS 归档镜像:https://mirrors.aliyun.com/centos-vault/
- CentOS 8 生命周期公告(EOL 说明):https://www.centos.org/centos-linux-eol/