CentOS 8 安装 Apache Commons Compress 指南
在 CentOS 8 从零搭建 Commons Compress 环境:dnf 装 JDK 17 与 Maven,处理 alternatives 与 JAVA_HOME 两个坑,含 Maven 与发行包两种方案及卸载。
CentOS 8 安装 Apache Commons Compress 指南
目标:在一台全新的 CentOS 8 服务器上搭建可编译、可运行 Apache Commons Compress 的 Java 环境,重点处理 CentOS 特有的 alternatives 默认 JDK 与 Maven JAVA_HOME 问题。全部命令与回显已在 CentOS 8(JDK 17 + Maven)实测通过。
一、环境信息
本章确认系统版本并安装 JDK 17 与 Maven。Commons Compress 1.28.0 的字节码目标是 Java 8(jar 清单 X-Compile-Target-JDK: 1.8),JDK 8 及以上均可运行;CentOS 8 自带 JDK 8 基础包,安装 JDK 17 后必须用 alternatives 把默认 java 切到 17,否则编译会回落到 1.8。
确认系统版本:
cat /etc/redhat-release
实测回显:
CentOS Linux release 8.4.2105
安装 JDK 17 开发包与 Maven(约 2~3 分钟,取决于网络):
sudo dnf install -y java-17-openjdk-devel maven
实测回显(输出节选,实测首尾):
Dependencies resolved.
========================================================================
Package Arch Version Repo
========================================================================
Installing:
java-17-openjdk-devel x86_64 1:17.0.1.0.12-2.el8_5 appstream
maven noarch 1:3.5.4-5.module_el8 appstream
Installing dependencies:
java-17-openjdk 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
xorg-x11-font-utils x86_64 1:7.5-41.el8 appstream
xorg-x11-fonts-Type1 noarch 7.5-19.el8 appstream
Complete!
CentOS 8 的关键一步:查看并切换默认 java。先看当前 alternatives 登记:
alternatives --list | grep -E "^java|jre_17|jre_1.8"
实测回显:
java auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre/bin/java
jre_1.8.0 auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre
jre_17 auto /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64
java 这一行是 auto 且指向 1.8 的路径,说明默认 JDK 仍是 1.8。显式切到 17 并验证:
sudo alternatives --set java java-17-openjdk.x86_64
sudo alternatives --set javac java-17-openjdk.x86_64
java -version
javac -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 17.0.1
Maven 还需要单独设置 JAVA_HOME(原因见第八章 FAQ Q2)。把下面两行追加到 /etc/profile.d/java17.sh 并重新登录,或在当前会话临时生效:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export LANG=C.UTF-8
mvn -v
实测回显:
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
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "6.8.0-138-generic", arch: "amd64", family: "unix"
Java version: 17.0.1 确认 Maven 已使用 JDK 17。
💡 技术拓展:压缩领域有两类工具,选型前要先分清。**归档(archiver)**把多个文件打包成一个文件,本身不一定压缩;**压缩(compressor)**只针对单条数据流做编码压缩。下表是常见格式的对比:
| 类别 | 格式 | 是否压缩 | 随机访问 | 典型工具 |
|---|---|---|---|---|
| 归档 | tar | 否(仅打包) | 否 | GNU tar、Commons Compress |
| 归档 | zip | 是(每条目 DEFLATE) | 是(中央目录) | Info-ZIP、Commons Compress |
| 归档 | jar | 是(zip 超集) | 是 | JDK jar、Commons Compress |
| 归档 | 7z | 是 | 部分 | p7zip、Commons Compress(只读为主) |
| 压缩 | gzip | 是(DEFLATE) | 否 | gzip、Commons Compress |
| 压缩 | bzip2 | 是(BWT) | 否 | bzip2、Commons Compress |
| 压缩 | xz | 是(LZMA2) | 否 | XZ Utils、Commons Compress |
| 压缩 | zstd | 是(Zstandard) | 否 | zstd、Commons Compress(需 zstd-jni) |
本文安装的 Commons Compress 属于 Java 库,同时覆盖「归档」与「压缩」两类能力;tar.gz、tar.bz2 这类双扩展名就是「先归档再压缩」的两层结构。
二、版本选型
Commons Compress 遵循「最新版只挂在官方下载目录、旧版进归档仓库」的发布策略,选型时建议直接用最新稳定版。下表列出常用版本(JDK 要求以各版本 jar 清单与官方发布说明为准):
| 版本 | 发布状态 | JDK 要求 | 必需传递依赖 | 适用场景 |
|---|---|---|---|---|
| 1.28.0 | 最新稳定版(2025-07) | Java 8 及以上 | commons-io 2.20.0、commons-lang3 3.18.0、commons-codec 1.19.0 | 新项目首选 |
| 1.27.1 | 稳定版 | Java 8 及以上 | commons-io、commons-lang3(1.27 起必需) | 1.28 有兼容顾虑时的回退 |
| 1.26.0 | 稳定版 | Java 8 及以上 | commons-io 2.15.1、commons-lang3 3.14.0、commons-codec 1.16.1 | 存量项目锁版本 |
| 1.21 | 维护期版本 | Java 8 及以上 | commons-io(可选时期) | 老系统兼容 |
关于「JDK 要求」的实测依据:1.28.0 jar 清单中 X-Compile-Source-JDK: 1.8、X-Compile-Target-JDK: 1.8、Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))" 三处都表明字节码目标是 Java 8,因此 JDK 8/11/17/21 都能运行(本文用 JDK 17 实测)。
本文统一采用以下坐标与下载地址(均实测有效):
Maven 坐标:org.apache.commons:commons-compress:1.28.0
发行包:https://downloads.apache.org/commons/compress/binaries/commons-compress-1.28.0-bin.tar.gz
校验文件:https://downloads.apache.org/commons/compress/binaries/commons-compress-1.28.0-bin.tar.gz.sha512
sha512(实测):
87c6b00ec854d8dc08834ed3bd1590d1facce45dad8c8fc37b2e82e30b18f793181f8dd6b8fcbba3850534b56cfafc7cfa3bd5236004293368fc3b7ff651d4b6
两点实测结论:
downloads.apache.org只保留最新版。实测访问旧版地址https://downloads.apache.org/commons/compress/binaries/commons-compress-1.26.0-bin.tar.gz返回404 Not Found,旧版需到https://archive.apache.org/dist/commons/compress/binaries/下载,且该归档站点速度较慢。- 从 1.27 开始
commons-io与commons-lang3成为必需依赖(1.28.0 的 pom 里还多了commons-codec),手动安装时必须一起放进类路径。
💡 技术拓展:如果只需要基础压缩能力,也可以选其他 Java 库。下表对比常见选择,本文使用功能最全的 Commons Compress:
| 库 | 坐标 | 支持格式 | 特点 |
|---|---|---|---|
| JDK 内置 | 无(java.util.zip) | zip/gzip/deflate | 零依赖,但不支持 tar、7z、bzip2、xz 等 |
| Commons Compress | org.apache.commons:commons-compress | 14 种压缩流、8 种归档流 | 覆盖面最广,API 统一 |
| snappy-java | org.xerial.snappy:snappy-java | snappy | 极致速度,JNI 实现,无归档能力 |
| XZ for Java | org.tukaani:xz | xz/lzma | 高压缩比,Commons Compress 以它为可选依赖 |
三、方案A:Maven 中央仓库依赖
方案A通过 Maven 自动下载 jar 及其全部传递依赖。创建项目骨架:
mkdir -p /opt/compress-demo/src/main/java/net/quzuo/demo
cd /opt/compress-demo
该命令无输出。写入 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>net.quzuo.demo</groupId>
<artifactId>compress-demo</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>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.28.0</version>
</dependency>
</dependencies>
</project>
逐项说明:maven.compiler.source/target 按 Java 17 语法编译;project.build.sourceEncoding 强制源码 UTF-8;dependencies 只声明 commons-compress,其余三个必需依赖作为传递依赖自动引入。
验证依赖解析结果:
mvn dependency:tree
实测回显(节选,实测首尾):
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ compress-demo ---
[INFO] net.quzuo.demo:compress-demo:jar:1.0.0
[INFO] \- org.apache.commons:commons-compress:jar:1.28.0:compile
[INFO] +- commons-codec:commons-codec:jar:1.19.0:compile
[INFO] +- commons-io:commons-io:jar:2.20.0:compile
[INFO] \- org.apache.commons:commons-lang3:jar:3.18.0:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
如果这一步报 Fatal error compiling: invalid target release: 17,说明 Maven 仍在用 JDK 8,请回第一章设置 JAVA_HOME 后重试。写入验证程序 src/main/java/net/quzuo/demo/HelloCompress.java:
package net.quzuo.demo;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.archivers.zip.ZipFile;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
public class HelloCompress {
public static void main(String[] args) throws IOException {
byte[] data = "hello commons compress".getBytes(StandardCharsets.UTF_8);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try (ZipArchiveOutputStream zos = new ZipArchiveOutputStream(bos)) {
ZipArchiveEntry entry = new ZipArchiveEntry("hello.txt");
entry.setSize(data.length);
zos.putArchiveEntry(entry);
zos.write(data);
zos.closeArchiveEntry();
}
File tmp = File.createTempFile("hello", ".zip");
Files.write(tmp.toPath(), bos.toByteArray());
try (ZipFile zf = ZipFile.builder().setFile(tmp).setCharset("UTF-8").get();
BufferedReader reader = new BufferedReader(
new InputStreamReader(zf.getInputStream(zf.getEntry("hello.txt")), StandardCharsets.UTF_8))) {
System.out.println("zip 读回内容: " + reader.readLine());
} finally {
tmp.delete();
}
Package p = ZipArchiveEntry.class.getPackage();
System.out.println("commons-compress 版本: " + p.getImplementationVersion());
System.out.println("验证通过");
}
}
程序逻辑:内存中用 ZipArchiveOutputStream 建一个含单条目 hello.txt 的 zip,落盘后用 ZipFile 随机访问读回首行,并从 jar 清单打印库版本。编译运行:
mvn -q compile exec:java -Dexec.mainClass=net.quzuo.demo.HelloCompress
说明:exec:java 来自 exec-maven-plugin,首次使用需在 pom 的 build/plugins 中声明(groupId 为 org.codehaus.mojo),或允许 Maven 交互式拉取。实测回显:
zip 读回内容: hello commons compress
commons-compress 版本: 1.28.0
验证通过
方案A安装完成。
四、方案B:官方发行包手动安装
方案B适合没有 Maven 的机器。下载发行包与校验文件:
sudo mkdir -p /opt/commons
cd /opt/commons
sudo curl -fsSLO https://downloads.apache.org/commons/compress/binaries/commons-compress-1.28.0-bin.tar.gz
sudo curl -fsSLO https://downloads.apache.org/commons/compress/binaries/commons-compress-1.28.0-bin.tar.gz.sha512
ls -l
实测回显:
total 128708
-rw-r--r-- 1 root root 131792030 Oct 13 08:11 commons-compress-1.28.0-bin.tar.gz
-rw-r--r-- 1 root root 129 Oct 13 08:11 commons-compress-1.28.0-bin.tar.gz.sha512
.sha512 文件内容是裸哈希(128 个十六进制字符加换行),校验时要拼成 哈希 文件名 的标准格式:
printf '%s %s\n' "$(cat commons-compress-1.28.0-bin.tar.gz.sha512)" commons-compress-1.28.0-bin.tar.gz | sha512sum -c -
实测回显:
commons-compress-1.28.0-bin.tar.gz: OK
解压并下载三个必需依赖 jar(发行包内没有 lib/ 目录):
sudo tar xzf commons-compress-1.28.0-bin.tar.gz
cd /opt/commons/commons-compress-1.28.0
sudo mkdir -p lib
cd lib
sudo curl -fsSLO https://repo1.maven.org/maven2/commons-io/commons-io/2.20.0/commons-io-2.20.0.jar
sudo curl -fsSLO https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.18.0/commons-lang3-3.18.0.jar
sudo curl -fsSLO https://repo1.maven.org/maven2/commons-codec/commons-codec/1.19.0/commons-codec-1.19.0.jar
ls -l
实测回显:
total 1776
-rw-r--r-- 1 root root 374716 Oct 13 08:11 commons-codec-1.19.0.jar
-rw-r--r-- 1 root root 563971 Oct 13 08:11 commons-io-2.20.0.jar
-rw-r--r-- 1 root root 702952 Oct 13 08:11 commons-lang3-3.18.0.jar
先实测一个必踩的坑:清单里声明的 Main-Class: org.apache.commons.compress.archivers.Lister 在缺依赖时无法启动,java -jar 会失败:
cd /opt/commons
java -jar commons-compress-1.28.0/commons-compress-1.28.0.jar
echo "退出码: $?"
实测回显:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/ArrayUtils
at org.apache.commons.compress.archivers.Lister.main(Lister.java:80)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.ArrayUtils
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:520)
退出码: 1
(输出节选,实测首尾,省略了最后一条调用帧)
正确做法是用 -cp 同时列出主 jar 与依赖 jar。把第三章的 HelloCompress.java 复制到 /opt/commons/(去掉 package 行),编译运行:
cd /opt/commons
export LANG=C.UTF-8
javac -encoding UTF-8 -cp "commons-compress-1.28.0/commons-compress-1.28.0.jar:commons-compress-1.28.0/lib/*" HelloCompress.java
java -Dfile.encoding=UTF-8 -cp ".:commons-compress-1.28.0/commons-compress-1.28.0.jar:commons-compress-1.28.0/lib/*" HelloCompress
实测回显:
zip 读回内容: hello commons compress
commons-compress 版本: 1.28.0
验证通过
注意 Linux 类路径分隔符是冒号 :(Windows 是分号)。方案B安装完成。
五、方案对比与选型建议
| 对比项 | 方案A:Maven 依赖 | 方案B:发行包手动安装 |
|---|---|---|
| 依赖管理 | 自动引入 3 个必需依赖与可选依赖 | 手动逐个下载,漏一个就运行报错 |
| 升级成本 | 改一行版本号重新构建 | 重新下载、校验、解压、改脚本 |
| 离线部署 | 需内网私服或预下载 | 天然离线友好 |
| 可复现性 | pom 锁版本,强 | 依赖脚本与人为记录 |
| 适用场景 | 一切有构建工具的工程 | 无 Maven 的跳板机、快速验证、交付现场 |
选型建议:开发/CI 环境一律方案A;目标机器没有 Maven 或需要临时排查时用方案B。CentOS 8 特有的一点是方案A还依赖 JAVA_HOME 设置正确,方案B只依赖 alternatives 里的 java 命令指向 17。
六、多版本管理
用「版本目录 + current 符号链接」方式管理多版本:所有版本平铺在 /opt/commons/ 下,current 指向当前生效版本。本次实测在 /opt/commons 下同时部署 1.28.0(发行包解压)与 1.26.0(主 jar 与依赖按其 pom 实测版本从中央仓库下载):
cd /opt/commons
sudo mkdir -p commons-compress-1.26.0/lib
sudo curl -fsSL -o commons-compress-1.26.0/lib/commons-compress-1.26.0.jar https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.26.0/commons-compress-1.26.0.jar
sudo curl -fsSL -o commons-compress-1.26.0/lib/commons-io-2.15.1.jar https://repo1.maven.org/maven2/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar
sudo curl -fsSL -o commons-compress-1.26.0/lib/commons-lang3-3.14.0.jar https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar
sudo curl -fsSL -o commons-compress-1.26.0/lib/commons-codec-1.16.1.jar https://repo1.maven.org/maven2/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar
sudo ln -sfn commons-compress-1.28.0 current
ls -l
实测回显:
total 12
-rw-r--r-- 1 root root 1767 Oct 13 08:10 HelloCompress.java
drwxr-xr-x 3 root root 4096 Oct 13 08:24 commons-compress-1.26.0
drwxr-xr-x 4 root root 4096 Oct 13 08:25 commons-compress-1.28.0
lrwxrwxrwx 1 root root 23 Oct 13 08:25 current -> commons-compress-1.28.0
用 current 链接编译运行验证程序(复用第四章的 HelloCompress.java):
cd /opt/commons
export LANG=C.UTF-8
javac -encoding UTF-8 -cp "current/commons-compress-1.28.0.jar:current/lib/*" HelloCompress.java -d out
java -Dfile.encoding=UTF-8 -cp "out:current/commons-compress-1.28.0.jar:current/lib/*" HelloCompress
实测回显:
zip 读回内容: hello commons compress
commons-compress 版本: 1.28.0
验证通过
切换到 1.26.0 再运行:
sudo ln -sfn commons-compress-1.26.0 current
ls -l current
java -Dfile.encoding=UTF-8 -cp "out:current/lib/*" HelloCompress
实测回显:
lrwxrwxrwx 1 root root 23 Oct 13 08:25 current -> commons-compress-1.26.0
zip 读回内容: hello commons compress
commons-compress 版本: 1.26.0
验证通过
程序打印的版本号随符号链接同步变化,证明切换生效。切回最新版:
sudo ln -sfn commons-compress-1.28.0 current
该命令无输出。关键约束:编译和运行都必须引用 current 路径,任何一处写死版本号目录,切换都会失效。
七、卸载
卸载分三部分:手动安装目录、Maven 本地仓库缓存、dnf 安装的软件包。清理手动目录与缓存:
sudo rm -rf /opt/commons
rm -rf ~/.m2/repository/org/apache/commons/commons-compress
该命令无输出。卸载 JDK 17 与 Maven 之前,若之前用 alternatives --set 改过默认 java,可先恢复自动模式:
sudo alternatives --auto java
java -version
实测回显:
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
执行卸载并验证:
sudo dnf remove -y java-17-openjdk-devel maven
javac -version
mvn -v
java -version
实测回显(节选,实测首尾):
Complete!
bash: javac: command not found
bash: mvn: command not found
bash: java: command not found
注意实测发现 dnf remove java-17-openjdk-devel maven 会把 java-1.8.0-openjdk 一并移除(它是 maven 安装时引入的依赖),dnf history info last 可以核实这一点:
dnf history info last | grep -E "Removed java|Removed maven"
实测回显:
Removed java-1.8.0-openjdk-1:1.8.0.312.b07-2.el8_5.x86_64 @@System
Removed java-1.8.0-openjdk-devel-1:1.8.0.312.b07-2.el8_5.x86_64 @@System
Removed java-1.8.0-openjdk-headless-1:1.8.0.312.b07-2.el8_5.x86_64 @@System
Removed java-17-openjdk-1:17.0.1.0.12-2.el8_5.x86_64 @@System
Removed java-17-openjdk-devel-1:17.0.1.0.12-2.el8_5.x86_64 @@System
Removed java-17-openjdk-headless-1:17.0.1.0.12-2.el8_5.x86_64 @@System
Removed maven-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch @@System
Removed maven-lib-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch @@System
若机器上还需要 JDK 8 跑其他业务,卸载前要意识到这个连带影响,必要时在卸载后执行 sudo dnf install -y java-1.8.0-openjdk 补回。
八、FAQ
Q1:alternatives --set java 之后 mvn 编译还是报 invalid target release: 17 为什么?
因为 CentOS 8 的 Maven 读取的是 JAVA_HOME 而不是 alternatives 的 java 命令。实测不设置 JAVA_HOME 时 mvn -v 显示 Java version: 1.8.0_312。解决:export JAVA_HOME=/usr/lib/jvm/java-17-openjdk(写入 /etc/profile.d/java17.sh 持久化),再用 mvn -v 核对 Java version 行。
Q2:安装完 java-17-openjdk-devel 后 java -version 仍显示 1.8 怎么办?
CentOS 8 的 alternatives 默认指向系统中已存在的 1.8。用 sudo alternatives --set java java-17-openjdk.x86_64 与 sudo alternatives --set javac java-17-openjdk.x86_64 显式切换,再用 java -version、javac -version 验证(见第一章实测回显)。
Q3:java -jar commons-compress-1.28.0.jar 报 NoClassDefFoundError: org/apache/commons/lang3/ArrayUtils?
1.28.0 有三个必需依赖(commons-lang3 3.18.0、commons-io 2.20.0、commons-codec 1.19.0),而 java -jar 会忽略 -cp。改用 java -cp "主jar:lib/*" 主类 方式运行,见第四章实测。
Q4:用到 xz/lzma/zstd/brotli 格式时报 NoClassDefFoundError?
这些算法依赖可选依赖:org.tukaani:xz(xz/lzma,实测版本 1.10)、com.github.luben:zstd-jni(zstd,1.5.7-4)、org.brotli:dec(brotli,0.1.2)。按需补进类路径或 pom。
Q5:downloads.apache.org 找不到旧版本?
官方主下载目录只保留最新版,实测旧版地址返回 404。历史版本在 https://archive.apache.org/dist/commons/compress/binaries/(速度较慢),或直接从 Maven 中央仓库按版本取 jar。
九、参考链接
- Apache Commons Compress 官方主页:https://commons.apache.org/proper/commons-compress/
- 1.28.0 发行包下载:https://downloads.apache.org/commons/compress/binaries/commons-compress-1.28.0-bin.tar.gz
- 发行包 sha512 校验文件:https://downloads.apache.org/commons/compress/binaries/commons-compress-1.28.0-bin.tar.gz.sha512
- Maven 中央仓库 1.28.0 目录:https://repo1.maven.org/maven2/org/apache/commons/commons-compress/1.28.0/
- Apache 归档下载站(历史版本):https://archive.apache.org/dist/commons/compress/binaries/
- 官方 javadoc(1.28.0 在线 API 文档):https://commons.apache.org/proper/commons-compress/javadocs/api-release/index.html
- CentOS 8 java-17-openjdk-devel 包信息:https://pkgs.org/download/java-17-openjdk-devel
- Maven 安装文档:https://maven.apache.org/install.html