Ubuntu 22.04 安装 Apache Commons Validator 指南

在 Ubuntu 22.04 上通过 apt 加 Maven 或官方二进制包两种方式安装 Apache Commons Validator 1.11.0 并完成最小验证的实操指南

Apache Commons ValidatorApache Commons Validator2026/10/15

Ubuntu 22.04 安装 Apache Commons Validator 指南

目标:在 Ubuntu 22.04 服务器上完成 Apache Commons Validator 1.11.0 的安装与最小验证工程落地,已在 Ubuntu 22.04(x86_64)+ OpenJDK 17.0.20.1 环境实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS
  • 架构:x86_64
  • JDK:OpenJDK 17.0.20.1(apt 仓库 openjdk-17-jdk)
  • 构建工具:Apache Maven 3.6.3(apt 仓库 maven)
  • 组件版本: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)

二、前置条件

  • 一台 Ubuntu 22.04 服务器,具备 root 或 sudo 权限;
  • 服务器可访问 archive.ubuntu.com(系统软件源)、repo1.maven.org(Maven 中央仓库)与 downloads.apache.org(Apache 官方发布目录);
  • 磁盘剩余空间不少于 1 GB(JDK 与 Maven 安装约 500 MB,Maven 本地仓库约 300 MB);
  • 熟悉基本的 shell 操作。

三、版本选型说明

3.1 为什么是 1.11.0

访问官方发布目录即可看到当前最新的 1.x 稳定版目录与文件(2026-07-31 发布):

$ curl -s https://downloads.apache.org/commons/validator/
binaries/                 2026-07-31 12:16
source/                   2026-07-31 12:16
RELEASE-NOTES.txt         2026-07-31 12:15   27K
$ 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 开头明确写道:Apache Commons Validator 1.11.0 RELEASE NOTES ... This is a feature and maintenance release. Java 8 or later is required.,即 1.11.0 要求 Java 8 及以上,JDK 17 完全兼容,本文以 JDK 17 运行实测。

💡 技术拓展:JDK 版本如何选择?

JDK要求适用场景本文是否采用
OpenJDK 81.11.0 的最低要求老系统兼容,编译时需把 maven.compiler.source 降为 8否
OpenJDK 11满足要求过渡期生产环境常见选择否
OpenJDK 17满足要求,LTS当前主流 LTS,apt 可直接安装是(实测)
OpenJDK 21+满足要求新项目可选否

本文所用版本为 1.11.0 + OpenJDK 17。

3.2 Maven 坐标核对

注意 Commons Validator 与其他 Commons 组件不同,其 groupId 就是 commons-validator(而不是 org.apache.commons)。中央仓库实测目录列表如下,最新目录为 1.11.0/:

$ curl -s https://repo1.maven.org/maven2/commons-validator/commons-validator/ | grep -oE 'href="[0-9][^"]*/"' | tail -12
href="1.11.0/"
href="1.2.0/"
href="1.3.0/"
href="1.3.1/"
href="1.4.0/"
href="1.4.1/"
href="1.5.0/"
href="1.5.1/"
href="1.6/"
href="1.7/"
href="1.8.0/"
href="1.9.0/"

该坐标在 1.11.0 下会自动带入四个编译期依赖(commons-beanutils 1.11.0、commons-digester 2.1、commons-logging 1.4.0、commons-collections 3.2.2),其中 digester 与 logging 主要服务于旧式 XML 规则配置方式,后文会展开。

3.3 安装方案总览

方案依赖获取方式需要安装的系统组件适用场景
方案 AMaven 中央仓库openjdk-17-jdk、maven日常开发与持续集成,推荐
方案 B官方 bin 二进制包openjdk-17-jdk(javac/java 即可)无法直连 Maven 仓库、仅需运行环境

两个方案互不冲突,可同时安装;本文均给出实测全过程。

四、安装方案 A:apt 安装 JDK 与 Maven,通过 Maven 依赖使用

4.1 更新软件源并安装

# apt-get update

输出节选(实测首尾):

Get:15 http://archive.ubuntu.com/ubuntu jammy-backports/universe amd64 Packages [35.6 kB]
Get:16 http://security.ubuntu.com/ubuntu jammy-security/multiverse amd64 Packages [96.8 kB]
Get:17 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [4429 kB]
Get:18 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [1323 kB]
Fetched 49.0 MB in 6s (7807 kB/s)
Reading package lists...

安装 JDK 17 与 Maven:

# DEBIAN_FRONTEND=noninteractive apt-get install -y openjdk-17-jdk maven

输出节选(实测末尾):

Processing triggers for ca-certificates (20260601~22.04.1) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

done.
done.
Processing triggers for libgdk-pixbuf-2.0-0:amd64 (2.42.8+dfsg-1ubuntu0.5) ...

4.2 验证安装结果

$ java -version
openjdk version "17.0.20.1" 2026-08-18
OpenJDK Runtime Environment (build 17.0.20.1+1-1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 17.0.20.1+1-1-22.04-Ubuntu, mixed mode, sharing)

$ javac -version
javac 17.0.20.1

$ mvn -version | head -4
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 17.0.20.1, vendor: Ubuntu, runtime: /usr/lib/jvm/java-17-openjdk-amd64
Default locale: en_US, platform encoding: ANSI_X3.4-1968

要点提示:Ubuntu 打包的 Maven 3.6.3 已自动使用刚安装的 JDK 17(Java version: 17.0.20.1 一行),无需手工配置 JAVA_HOME。platform encoding: ANSI_X3.4-1968 表示系统未启用 UTF-8 区域,处理中文数据时建议按第七节配置说明设置编码。

4.3 创建最小验证工程

# mkdir -p /work/hellocheck/src/main/java

/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"));
    }
}

4.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:24 min
[INFO] Finished at: 2026-10-15T01:18:52Z
[INFO] ------------------------------------------------------------------------

首次构建耗时 5 分 24 秒,主要花在从中央仓库下载依赖与插件;二次构建利用本地缓存通常在 10 秒级。shade 插件产生的 WARNING 属于commons-logging 多版本资源合并提示,不影响运行。

# 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

验证结果:五个断言全部符合预期——合法邮箱、非法邮箱、IPv4、IPv6 地址与 Luhn 信用卡号校验均工作正常,方案 A 落地完成。

五、安装方案 B:官方二进制包 + javac/java 直跑

5.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:33 commons-validator-1.11.0-bin.tar.gz

官方 .sha512 文件只有一行裸哈希(不含文件名列),直接 sha512sum -c 会报格式错误,需自行拼接成标准格式:

# cat commons-validator-1.11.0-bin.tar.gz.sha512
de5b755fe96916208bf38d608940d1a258c01964b21e72fae4cd892c8a3f8cb9699778857d59492cccbe985fe7b068c0968ece5777927812fd9cd4d13da2fa4c
# echo 'de5b755fe96916208bf38d608940d1a258c01964b21e72fae4cd892c8a3f8cb9699778857d59492cccbe985fe7b068c0968ece5777927812fd9cd4d13da2fa4c  commons-validator-1.11.0-bin.tar.gz' > check.sha512
# sha512sum -c check.sha512
commons-validator-1.11.0-bin.tar.gz: OK

5.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

核心运行时 jar 即 commons-validator-1.11.0.jar;apidocs 与 javadoc/sources 包为离线文档资料。

5.3 编译运行

把 4.3 节的 HelloValidator.java 拷入解压目录,直接用 javac 编译、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,一个主 jar 加上系统 JDK 即可完成编译与运行。

要点提示:示例用到的 EmailValidator、InetAddressValidator、LuhnCheckDigit 等现代校验器全部位于组件主 jar 内,不依赖其他 jar。但如果使用旧式 XML 规则配置方式(ValidatorResources 解析 validation.xml),则需要额外准备 commons-beanutils、commons-digester、commons-logging、commons-collections 四个 jar 并加入 classpath,这一依赖组合在 3.2 节的 POM 依赖说明中已列出。

六、方案对比与选择建议

对比项方案 A(Maven 依赖)方案 B(官方 bin 包)
依赖管理自动解析四个传递依赖,升级只改版本号手工下载,XML 方式需自备 4 个附加 jar
构建集成直接接入 mvn package/IDE需手工维护 classpath
首次成本apt 安装约 1~2 分钟,构建 5 分钟量级下载 2.8 MB,秒级
可复现性坐标固定,锁定版本容易需自行保管 jar 与校验文件
适用对象应用开发团队(推荐)无 Maven 环境、离线机器、快速验证

选择建议:凡是有 Maven 或 Gradle 的项目一律走方案 A;方案 B 适合作为内网/离线机器的兜底路径,或在排查问题时用最小 classpath 隔离验证。

七、配置说明

  • 组件本身没有任何运行时配置文件,所有行为通过构造参数与代码开关控制,可参考本专栏《Apache Commons Validator 1.11.0 配置参数详解》。
  • 编码:4.2 节实测 platform encoding: ANSI_X3.4-1968,含中文输入输出时建议统一执行 export LANG=C.UTF-8,或在 mvn 命令与 java -jar 命令中显式加 -Dfile.encoding=UTF-8。
  • 代理:内网环境如需经代理访问中央仓库,在 ~/.m2/settings.xml 的 <proxies> 段配置,而不是依赖 http_proxy 环境变量(Maven 的 JVM 不会读取该变量)。
  • 离线缓存:构建一次后,~/.m2/repository 即成为本地缓存,可在内网机器间直接拷贝复用。

八、常见问题(FAQ)

1. mvn package 卡在下载依赖。 中央仓库直连慢时,在 ~/.m2/settings.xml 中配置镜像(如国内镜像站),或为公司内网配置 <proxies>。

2. 编译报错 invalid source release: 17。 说明实际使用的 JDK 低于 17。确认 mvn -version 的 Java version 行;若是 JDK 8/11,将 POM 中 maven.compiler.source/maven.compiler.target 改为对应版本(Commons Validator 1.11.0 本身只要求 Java 8)。

3. 控制台中文乱码。 见第七节编码配置;实测 java -Dfile.encoding=UTF-8 -jar hellocheck.jar 即可输出正常。

4. sha512sum -c 报 no properly formatted SHA512 checksum lines found。 官方 .sha512 是裸哈希格式,按 5.1 节拼接 哈希 文件名 两列后再校验。

5. 运行 XML 规则配置程序抛 NoClassDefFoundError: org/apache/commons/digester/Digester。 XML 方式依赖 commons-digester/commons-logging/commons-beanutils/commons-collections,方案 B 用户需手工补齐这四个 jar;方案 A 用户由 Maven 自动带入。

6. 如何只升级组件版本? 方案 A 中仅修改 POM 依赖版本并重新构建;方案 B 需重新下载对应版本的 bin 包并替换 classpath 中的 jar。

九、卸载与清理

# rm -rf /work/hellocheck /work/commons-validator-1.11.0 /work/commons-validator-1.11.0-bin.tar.gz /work/check.sha512
# DEBIAN_FRONTEND=noninteractive apt-get remove --purge -y maven openjdk-17-jdk
# apt-get autoremove -y
# rm -rf ~/.m2

输出节选(实测末尾,autoremove 后显示):

Processing triggers for libc-bin (2.35-0ubuntu3.11) ...

执行后 java -version 与 mvn -version 均提示 command not found,系统恢复至初始状态。

十、参考链接