CentOS 8 安装 Apache Commons Validator 指南
在 CentOS 8 上修复 EOL 仓库、通过 dnf 安装 OpenJDK 17 与 Maven 并以两种方式落地 Apache Commons Validator 1.11.0 的实操指南
CentOS 8 安装 Apache Commons Validator 指南
目标:在 CentOS 8 服务器上修复已停止维护(EOL)的 yum/dnf 仓库,安装 OpenJDK 17 与 Maven,并以 Maven 依赖、官方二进制包两种方式完成 Apache Commons Validator 1.11.0 的最小验证,已在 CentOS 8(x86_64)+ OpenJDK 17.0.1 环境实测通过。
一、环境信息
- 操作系统:CentOS Linux release 8(核心仓库快照对应 8.5.2111 vault 版本)
- 架构:x86_64
- JDK:java-17-openjdk 17.0.1.0.12-2.el8_5(dnf 安装)
- 构建工具:Apache Maven 3.5.4(Red Hat 3.5.4-5,dnf 安装)
- 组件版本:Apache Commons Validator 1.11.0(2026-07-31 发布,1.x 系列最新稳定版)
- Maven 坐标:
commons-validator:commons-validator:1.11.0 - 工作目录:
/work(示例工程位于/work/hellocheck,二进制包解压于/work/commons-validator-1.11.0)
二、前置条件
- 一台 CentOS 8 服务器,具备 root 权限;
- 服务器可访问外网 HTTP 服务(用于系统仓库与组件下载);
- 磁盘剩余空间不少于 1 GB;
- 了解 dnf 包管理基本操作。
三、版本选型说明
3.1 组件版本:1.11.0
与 Ubuntu 指南一致,官方发布目录中当前 1.x 系列最新稳定版为 1.11.0(2026-07-31 发布):
$ curl -s https://downloads.apache.org/commons/validator/binaries/
commons-validator-1.11.0-bin.tar.gz 2026-07-31 12:15 2.8M
commons-validator-1.11.0-bin.tar.gz.asc 2026-07-31 12:15 265
commons-validator-1.11.0-bin.tar.gz.sha512 2026-07-31 12:15 129
commons-validator-1.11.0-bin.zip 2026-07-31 12:15 3.2M
commons-validator-1.11.0-bin.zip.asc 2026-07-31 12:15 265
commons-validator-1.11.0-bin.zip.sha512 2026-07-31 12:15 129
官方 RELEASE-NOTES 明确 Java 8 or later is required,因此 JDK 17 可直接运行。
💡 技术拓展:运行时选型——JDK 8/11/17 均满足 1.11.0 要求。CentOS 8 的 AppStream 仓库同时提供
java-1.8.0-openjdk、java-11-openjdk与java-17-openjdk,本文选择 JDK 17(LTS、与 Ubuntu 指南保持一致);CentOS 8 的 Maven 为 3.5.4(较 Ubuntu 的 3.6.3 略旧,构建本工程没有兼容性问题)。本文所用组合为 1.11.0 + OpenJDK 17.0.1 + Maven 3.5.4。
3.2 Maven 坐标
groupId 为 commons-validator(不是 org.apache.commons,这是 Commons Validator 的特例):
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.11.0</version>
</dependency>
该坐标自动带入 commons-beanutils 1.11.0、commons-digester 2.1、commons-logging 1.4.0、commons-collections 3.2.2 四个编译期依赖。
3.3 安装方案总览
| 方案 | 依赖获取方式 | 需要安装的系统组件 | 适用场景 |
|---|---|---|---|
| 方案 A | Maven 中央仓库 | java-17-openjdk-devel、maven | 日常开发与持续集成,推荐 |
| 方案 B | 官方 bin 二进制包 | java-17-openjdk-devel | 无法直连 Maven 仓库、仅需运行环境 |
四、修复 EOL 仓库(必做)
CentOS 8 已于 2021 年底停止维护,官方 mirror.centos.org 已下线,仓库文件中的 mirrorlist 全部失效,直接 dnf makecache 会失败。第一步必须把仓库指向 vault 归档。
实测发现一个重要事实:vault.centos.org 官方域名在部分网络环境下会被其 CloudFront 边缘节点直接拒绝(HTTP 403):
$ curl -sI https://vault.centos.org/8.5.2111/AppStream/x86_64/os/repodata/repomd.xml | head -1
HTTP/2 403
因此本文改用社区 vault 镜像(以阿里云镜像站为例),将 8.x 系列最后一个点版本 8.5.2111 写入仓库文件:
# sed -i -e 's|mirrorlist=|#mirrorlist=|g' \
-e 's|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com/centos-vault|g' \
-e 's|$releasever|8.5.2111|g' /etc/yum.repos.d/CentOS-*.repo
# dnf clean all
# dnf makecache
输出节选(实测末尾):
CentOS Linux 8.5.2111 - AppStream 3.3 MB/s | 8.4 MB 00:02
CentOS Linux 8.5.2111 - BaseOS 5.7 MB/s | 4.6 MB 00:00
CentOS Linux 8.5.2111 - Extras 12 kB/s | 10 kB 00:00
Metadata cache created.
要点提示:Metadata cache created. 说明 BaseOS、AppStream、Extras 三个核心仓库全部可用;若你们网络访问阿里云镜像也不通畅,可将 https://mirrors.aliyun.com/centos-vault 换成任一可用的 centos-vault 镜像地址,路径结构相同。
五、安装方案 A:dnf 安装 JDK 17 与 Maven,通过 Maven 依赖使用
5.1 查询并安装
先确认仓库中可用的版本:
# dnf list --available 'java-17-openjdk*'
Available Packages
java-17-openjdk.x86_64 1:17.0.1.0.12-2.el8_5 appstream
java-17-openjdk-demo.x86_64 1:17.0.1.0.12-2.el8_5 appstream
java-17-openjdk-devel.x86_64 1:17.0.1.0.12-2.el8_5 appstream
java-17-openjdk-headless.x86_64 1:17.0.1.0.12-2.el8_5 appstream
# dnf list --available maven
Available Packages
maven.noarch 1:3.5.4-5.module_el8.0.0+39+6a9b6e22 appstream
安装编译版 JDK 与 Maven:
# dnf install -y java-17-openjdk-devel maven
输出节选(实测末尾):
ttmkfdir-3.0.9-54.el8.x86_64
tzdata-java-2021e-1.el8.noarch
which-2.21-16.el8.x86_64
xkeyboard-config-2.28-1.el8.noarch
xorg-x11-font-utils-1:7.5-41.el8.x86_64
xorg-x11-fonts-Type1-7.5-19.el8.noarch
Complete!
5.2 切换默认 JDK 并验证
实测关键点:安装 maven 会连带装入 java-1.8.0-openjdk 并把默认 java 指向 1.8,必须用 alternatives 显式切换:
# 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)
# alternatives --set java /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java
# alternatives --set javac /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/javac
# 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)
# javac -version
javac 17.0.1
Maven 自身按 JAVA_HOME 选择 JDK,即使默认 java 已切到 17,mvn -version 仍显示 1.8,需要显式设置:
# mvn -version | 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_5.x86_64/jre
# export JAVA_HOME=/usr/lib/jvm/java-17
# 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: Red Hat, Inc., runtime: /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64
要点提示:把 export JAVA_HOME=/usr/lib/jvm/java-17 写入 /etc/profile.d/java17.sh 或 ~/.bash_profile 可长期生效。
5.3 创建最小验证工程
与 Ubuntu 指南相同,创建 /work/hellocheck 工程。
/work/hellocheck/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>com.example</groupId>
<artifactId>hellocheck</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.11.0</version>
</dependency>
</dependencies>
<build>
<finalName>hellocheck</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.1</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>shade</goal></goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>HelloValidator</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
/work/hellocheck/src/main/java/HelloValidator.java:
import org.apache.commons.validator.routines.EmailValidator;
import org.apache.commons.validator.routines.InetAddressValidator;
import org.apache.commons.validator.routines.checkdigit.LuhnCheckDigit;
public class HelloValidator {
public static void main(String[] args) {
System.out.println("EmailValidator.isValid(user@example.com) = "
+ EmailValidator.getInstance().isValid("user@example.com"));
System.out.println("EmailValidator.isValid(bad@@example.com) = "
+ EmailValidator.getInstance().isValid("bad@@example.com"));
System.out.println("InetAddressValidator.isValidInet4Address(192.168.1.10) = "
+ InetAddressValidator.getInstance().isValidInet4Address("192.168.1.10"));
System.out.println("InetAddressValidator.isValidInet6Address(2001:db8::1) = "
+ InetAddressValidator.getInstance().isValidInet6Address("2001:db8::1"));
System.out.println("LuhnCheckDigit.isValid(4417123456789113) = "
+ LuhnCheckDigit.LUHN_CHECK_DIGIT.isValid("4417123456789113"));
}
}
5.4 构建并运行
# cd /work/hellocheck && mvn -B package
输出节选(实测末尾):
[WARNING] mvn dependency:tree -Ddetail=true and the above output.
[WARNING] See https://maven.apache.org/plugins/maven-shade-plugin/
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing /work/hellocheck/target/hellocheck.jar with /work/hellocheck/target/hellocheck-1.0.0-shaded.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 05:25 min
[INFO] Finished at: 2026-10-15T01:30:27Z
[INFO] ------------------------------------------------------------------------
首次构建 5 分 25 秒(依赖与插件下载为主),与 Ubuntu 指南的 5 分 24 秒基本一致,说明构建时间由网络决定而非系统发行版。
# java -jar /work/hellocheck/target/hellocheck.jar
EmailValidator.isValid(user@example.com) = true
EmailValidator.isValid(bad@@example.com) = false
InetAddressValidator.isValidInet4Address(192.168.1.10) = true
InetAddressValidator.isValidInet6Address(2001:db8::1) = true
LuhnCheckDigit.isValid(4417123456789113) = true
验证结果:五项校验全部符合预期,方案 A 在 CentOS 8 上落地完成。
六、安装方案 B:官方二进制包 + javac/java 直跑
6.1 下载并校验
# cd /work
# curl -sO https://downloads.apache.org/commons/validator/binaries/commons-validator-1.11.0-bin.tar.gz
# curl -sO https://downloads.apache.org/commons/validator/binaries/commons-validator-1.11.0-bin.tar.gz.sha512
# ls -l commons-validator-1.11.0-bin.tar.gz
-rw-r--r-- 1 root root 2948421 Oct 15 01:29 commons-validator-1.11.0-bin.tar.gz
官方 .sha512 为裸哈希(仅一行 128 位十六进制),直接校验会报 no properly formatted SHA512 checksum lines found,拼接文件名列后再校验:
# echo 'de5b755fe96916208bf38d608940d1a258c01964b21e72fae4cd892c8a3f8cb9699778857d59492cccbe985fe7b068c0968ece5777927812fd9cd4d13da2fa4c commons-validator-1.11.0-bin.tar.gz' > check-fixed.sha512
# sha512sum -c check-fixed.sha512
commons-validator-1.11.0-bin.tar.gz: OK
6.2 解压与编译运行
# tar xzf commons-validator-1.11.0-bin.tar.gz
# ls commons-validator-1.11.0/
LICENSE.txt
NOTICE.txt
README.md
RELEASE-NOTES.txt
apidocs
commons-validator-1.11.0-javadoc.jar
commons-validator-1.11.0-sources.jar
commons-validator-1.11.0-test-sources.jar
commons-validator-1.11.0-tests.jar
commons-validator-1.11.0.jar
将 5.3 节的 HelloValidator.java 拷入解压目录:
# cd /work/commons-validator-1.11.0
# javac -cp commons-validator-1.11.0.jar HelloValidator.java
# java -cp .:commons-validator-1.11.0.jar HelloValidator
EmailValidator.isValid(user@example.com) = true
EmailValidator.isValid(bad@@example.com) = false
InetAddressValidator.isValidInet4Address(192.168.1.10) = true
InetAddressValidator.isValidInet6Address(2001:db8::1) = true
LuhnCheckDigit.isValid(4417123456789113) = true
验证结果:方案 B 全程无需 Maven。EmailValidator、InetAddressValidator、LuhnCheckDigit 等现代校验器(routines 包)只需主 jar;旧式 XML 规则配置方式需要额外将 commons-beanutils、commons-digester、commons-logging、commons-collections 四个 jar 加入 classpath。
七、方案对比与选择建议
| 对比项 | 方案 A(Maven 依赖) | 方案 B(官方 bin 包) |
|---|---|---|
| 依赖管理 | 自动带入 4 个传递依赖 | XML 方式需手工备齐 4 个 jar |
| JDK 管理 | 需处理 alternatives + JAVA_HOME 双处切换 | 同样需要 alternatives 切换 |
| 首次成本 | 仓库修复 + 装包约 3~5 分钟,构建 5 分钟量级 | 下载 2.8 MB,秒级 |
| 可复现性 | 坐标锁定,CI 友好 | 自管 jar 与校验文件 |
| 适用对象 | 应用开发团队(推荐) | 离线/内网机器、最小化验证 |
选择建议:CentOS 8 上方案 A 的主要门槛是 EOL 仓库修复(第四节,一次性工作)与默认 JDK 切换(5.2 节);跨过这两个门槛后,日常维护体验与 Ubuntu 无差异。方案 B 适合作为兜底。
八、配置说明
- 组件本身无运行时配置文件,行为全部由代码开关控制,详见本专栏《Apache Commons Validator 1.11.0 配置参数详解》。
- JDK 管理三件套:
alternatives --set java(命令行运行时)、alternatives --set javac(编译器)、JAVA_HOME(Maven 及多数中间件读取),三处需一致,完整切换命令见第五节。 - 编码:实测
mvn -version显示platform encoding: ANSI_X3.4-1968,处理中文时建议export LANG=C.UTF-8或命令行加-Dfile.encoding=UTF-8。 - Maven 3.5.4 与 3.11.0 版 compiler/shade 插件兼容,无需额外配置;若公司仓库限制插件版本,可用
-Dmaven.compiler.plugin.version类自定义属性调整。
九、常见问题(FAQ)
1. dnf makecache 报 Status code: 403 for https://vault.centos.org/8.5.2111/AppStream/x86_64/os/repodata/repomd.xml。
官方 vault 域名在部分网络被 CloudFront 拦截(本文实测遇到),换成社区 vault 镜像即可,见第四节;注意 baseurl 中 $releasever 需一并替换为 8.5.2111。
2. 忘了修仓库直接装包,报 Failed to download metadata for repo 'appstream'。
先执行第四节的 sed 与 dnf makecache,再安装软件包。
3. mvn package 报 invalid target release: 17。
Maven 仍在用 JDK 8:检查 mvn -version 的 Java version 行,按 5.2 节设置 JAVA_HOME 并重新执行。
4. java -version 与 javac -version 版本不一致。
alternatives 的 java 与 javac 是两个独立条目,需要分别 --set(5.2 节两条命令)。
5. sha512sum -c 报格式错误。
官方 .sha512 为裸哈希,自行拼成 哈希 文件名 格式(6.1 节)。
6. 运行 XML 规则配置程序抛 NoClassDefFoundError: org/apache/commons/digester/Digester。
为 classpath 补上 commons-beanutils、commons-digester、commons-logging、commons-collections 四个 jar,或改用方案 A 由 Maven 自动带入。
7. 是否可以直接用 CentOS Stream 9/RHEL 9 替代? 可以,新系统仓库无需修复,且自带更新的 JDK;但 CentOS 8 存量机器仍需按本文流程操作。
十、卸载与清理
# rm -rf /work/hellocheck /work/commons-validator-1.11.0 /work/commons-validator-1.11.0-bin.tar.gz /work/check-fixed.sha512
# dnf remove -y maven java-17-openjdk-devel java-1.8.0-openjdk java-1.8.0-openjdk-headless
# dnf autoremove -y
# rm -rf ~/.m2
输出节选(实测末尾):
Removed:
maven-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch
java-17-openjdk-devel-1:17.0.1.0.12-2.el8_5.x86_64
Complete!
执行后 java、javac、mvn 均不再可用,仓库文件如需恢复可用状态,将 /etc/yum.repos.d/CentOS-*.repo 中的 baseurl 指向其他可用镜像或重装 centos-linux-release 包覆盖即可。
十一、参考链接
- Apache Commons Validator 官方主页:https://commons.apache.org/proper/commons-validator/
- 官方下载目录:https://downloads.apache.org/commons/validator/
- 1.11.0 Release Notes:https://downloads.apache.org/commons/validator/RELEASE-NOTES.txt
- Maven 中央仓库坐标:https://repo1.maven.org/maven2/commons-validator/commons-validator/
- CentOS Vault 说明(官方 EOL 政策):https://www.centos.org/centos-linux-eol/
- Java API 文档(1.11.0):https://commons.apache.org/proper/commons-validator/apidocs/index.html