CentOS 8 安装 Apache Commons DbUtils 指南
CentOS 8 搭建 Apache Commons DbUtils 1.8.1:装 JDK 17 与 Maven(含 alternatives 与 JAVA_HOME 配置),给出依赖与发行包两种获取方案,含 sha512 校验与卸载。
CentOS 8 安装 Apache Commons DbUtils 指南
目标:在一台全新的 CentOS 8 服务器上搭建可编译、可运行 Apache Commons DbUtils 的 Java 环境,并提供 Maven 依赖与官方发行包两种获取 jar 的方案。全部命令与回显已在 CentOS 8(JDK 17 + Maven,连接 H2 内嵌数据库)实测通过。
一、环境信息
本章先确认操作系统版本,再安装 JDK 17 与 Maven,为后续获取 Commons DbUtils 做准备。Commons DbUtils 1.8.1 编译目标为 Java 8(jar 内清单 X-Compile-Target-JDK: 1.8),因此 JDK 8 及以上均可运行,本文统一使用 JDK 17 作为开发与运行环境。
先确认系统版本:
cat /etc/os-release | grep -E "^(NAME|VERSION)="
实测回显:
NAME="CentOS Linux"
VERSION="8"
安装 JDK 17、Maven 与 curl(约 1~2 分钟,取决于网络):
sudo dnf install -y java-17-openjdk-devel maven curl
实测回显(输出节选,实测首尾):
Dependencies resolved.
=================================================================================================================
Package Arch Version Repo Size
=================================================================================================================
Installing:
java-17-openjdk-devel x86_64 1:17.0.1.0.12-2.el8_5 AppStream 5.1 M
...
Installing : java-17-openjdk-devel-1:17.0.1.0.12-2.el8_5.x86_ 138/143
Running scriptlet: java-17-openjdk-devel-1:17.0.1.0.12-2.el8_5.x86_ 138/143
Running scriptlet: java-17-openjdk-devel-1:17.0.1.0.12-2.el8_5.x86_ 143/143
Complete!
安装完成后先看默认 java 指向哪个版本:
java -version
javac -version
实测回显:
openjdk version "1.8.0_312" 2026-08-18
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
javac 1.8.0_312
原因:CentOS 8 的 maven 软件包依赖 java-1.8.0-openjdk,安装 Maven 时把 JDK 8 一并带进来,alternatives 的优先级使 java 仍指向 JDK 8。实测确认系统里同时存在两套 JDK:
rpm -qa | grep -i openjdk | sort
实测回显:
java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64
java-1.8.0-openjdk-devel-1.8.0.312.b07-2.el8_5.x86_64
java-1.8.0-openjdk-headless-1.8.0.312.b07-2.el8_5.x86_64
java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64
java-17-openjdk-devel-17.0.1.0.12-2.el8_5.x86_64
java-17-openjdk-headless-17.0.1.0.12-2.el8_5.x86_64
JDK 17 的安装目录是 /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64,用 alternatives 把默认 java/javac 切到它:
sudo alternatives --set java /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java
sudo alternatives --set javac /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/javac
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
java/javac 已切到 17。但 Red Hat 的 Maven 脚本不跟随 alternatives,需要显式设置 JAVA_HOME。先看未设置时的现象:
mvn -v | grep "Java version"
实测回显:
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
Maven 仍在使用 JDK 8。设置 JAVA_HOME 指向 JDK 17:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64
export PATH=$JAVA_HOME/bin:$PATH
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
OS name: "linux", version: "6.8.0-138-generic", arch: "amd64", family: "unix"
Java version: 17.0.1 说明 Maven 已用上 JDK 17。为让配置长期生效,把 JAVA_HOME 写入 ~/.bashrc:
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
该命令无输出。此外,若 mvn -v 显示 platform encoding 不是 UTF-8,Java 程序打印中文会乱码,可追加 export LANG=C.UTF-8。实测设置后 platform encoding: UTF-8,中文回显正常。
二、版本选型
Commons DbUtils 采用「最新稳定版挂在官方主下载目录、旧版进归档仓库」的发布策略,选型时建议直接用最新稳定版。下表列出常用版本(JDK 要求以各版本 jar 清单实测为准):
| 版本 | 发布状态 | JDK 编译目标(实测清单) | 编译该 jar 的 JDK | 适用场景 |
|---|---|---|---|---|
| 1.8.1 | 最新稳定版 | Java 8(X-Compile-Target-JDK: 1.8) | Build-Jdk-Spec: 17 | 新项目首选 |
| 1.8.0 | 稳定版 | Java 8(X-Compile-Target-JDK: 1.8) | Build-Jdk-Spec: 11 | 1.8.1 有兼容顾虑时的回退 |
| 1.7 | 旧版 | Java 6(X-Compile-Target-JDK: 1.6) | Build-Jdk: 1.8.0_102 | 老系统 low-JDK 兼容 |
| 1.6 | 更早版本 | Java 6(X-Compile-Target-JDK: 1.6) | Build-Jdk: 1.7.0_60 | 仅历史项目使用 |
关键差异与选型:1.8.1 与 1.8.0 的字节码目标都是 Java 8,JDK 8/11/17/21 均可运行;1.7 及更早的目标是 Java 6,只在必须兼容极老运行时(JDK 6/7)时才选。本文统一使用 1.8.1。
本文统一采用以下坐标与下载地址(均实测有效):
Maven 坐标:commons-dbutils:commons-dbutils:1.8.1
发行包:https://downloads.apache.org/commons/dbutils/binaries/commons-dbutils-1.8.1-bin.tar.gz
校验文件:https://downloads.apache.org/commons/dbutils/binaries/commons-dbutils-1.8.1-bin.tar.gz.sha512
sha512(实测):
458dbca14ef7dbb034dcc01ed806bb4fa6fbf772b3bec7edfb1c530c0239cac9662a9733208ab68e4d3e436efd06bf9b97344595476c855637db2fae22992813
三个实测结论需要提前知道:
- Maven 坐标的 groupId 是
commons-dbutils(不是org.apache.commons)。实测访问https://repo1.maven.org/maven2/org/apache/commons/commons-dbutils/1.8.1/commons-dbutils-1.8.1.pom返回HTTP 404,正确路径为https://repo1.maven.org/maven2/commons-dbutils/commons-dbutils/1.8.1/。 - Commons DbUtils 没有任何编译期传递依赖:其 pom 只声明了 test 作用域依赖(junit-vintage-engine、mockito-core、hamcrest-all),jar 清单里也只有
Import-Package: javax.sql。这意味着运行时只需主 jar 加一个 JDBC 驱动即可。 downloads.apache.org只保留最新版。旧版(如 1.7)需到 Maven 中央仓库或https://archive.apache.org/dist/commons/dbutils/下载。
💡 技术拓展:Java 里「把
ResultSet转成对象」有多种实现路线,选型前先看清各自定位。下表对比常见方案:
| 方案 | 定位 | 依赖 | 对象映射 | 适用场景 |
|---|---|---|---|---|
| 原生 JDBC | JDK 内置接口 | 无 | 手写 rs.getXxx() 循环 | 逻辑极简单、零依赖 |
| Spring JdbcTemplate | Spring 生态的 JDBC 封装 | spring-jdbc | RowMapper 手动映射或 BeanPropertyRowMapper | 已用 Spring 的工程 |
| Commons DbUtils | 轻量 JDBC 结果集工具 | 仅 JDBC 驱动 | 内置 Bean/Map/Scalar 等 Handler | 不想引入 Spring 的轻量项目 |
| MyBatis | 全功能持久层框架 | mybatis 等 | XML/注解 + 内部映射器 | 需要 SQL 管理、缓存、动态 SQL |
本文使用 Commons DbUtils:它只做「执行 SQL + 结果集到对象的转换」,不接管连接池与事务,体量小、零运行时依赖,适合在已有数据源之上做一层轻封装。
三、方案A:Maven 中央仓库依赖
方案A通过 Maven 自动下载 jar 及其全部传递依赖,是工程化项目的推荐做法。Commons DbUtils 本身无可选依赖,但要让验证程序连上真实数据库,还需要一个 JDBC 驱动——本文用零安装的 H2 内嵌数据库(坐标 com.h2database:h2,实测版本 2.5.252)。先创建项目骨架:
mkdir -p /opt/dbutils-demo/src/main/java/net/quzuo/demo
cd /opt/dbutils-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>dbutils-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>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.5.252</version>
</dependency>
</dependencies>
</project>
逐项说明:maven.compiler.source/target 指定按 Java 17 语法编译;project.build.sourceEncoding 强制源码按 UTF-8 读取;dependencies 里的 commons-dbutils 是本库,h2 是验证用的内嵌数据库驱动。
验证依赖解析结果:
mvn dependency:tree
实测回显(输出节选,实测首尾):
[INFO] Downloading from central: https://repo.maven.apache.org/maven2/commons-dbutils/commons-dbutils/1.8.1/commons-dbutils-1.8.1.pom
[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/commons-dbutils/commons-dbutils/1.8.1/commons-dbutils-1.8.1.pom (14 kB at 28 kB/s)
[INFO] Downloading from central: https://repo.maven.apache.org/maven2/com/h2database/h2/2.5.252/h2-2.5.252.pom
[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/com/h2database/h2/2.5.252/h2-2.5.252.pom (1.1 kB at 2.4 kB/s)
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ dbutils-demo ---
[INFO] net.quzuo.demo:dbutils-demo:jar:1.0.0
[INFO] +- commons-dbutils:commons-dbutils:jar:1.8.1:compile
[INFO] \- com.h2database:h2:jar:2.5.252:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
依赖树只有 commons-dbutils 与 h2 两个 compile 节点,没有其它 +- 子树,这正是「DbUtils 无编译期传递依赖」的实测证据。写入最小验证程序 src/main/java/net/quzuo/demo/HelloDbUtils.java:
package net.quzuo.demo;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.List;
import java.util.Map;
public class HelloDbUtils {
public static void main(String[] args) throws Exception {
Connection conn = DriverManager.getConnection("jdbc:h2:mem:hellodb;DB_CLOSE_DELAY=-1");
QueryRunner runner = new QueryRunner();
runner.update(conn, "create table greeting(id int primary key, msg varchar(64))");
runner.update(conn, "insert into greeting values(?, ?)", 1, "hello commons dbutils");
List<Map<String, Object>> rows =
runner.query(conn, "select id, msg from greeting", new MapListHandler());
System.out.println("查询结果: " + rows);
System.out.println("DbUtils 版本: "
+ QueryRunner.class.getPackage().getImplementationVersion());
conn.close();
System.out.println("验证通过");
}
}
程序逻辑:用 DriverManager 连一个 H2 内存库(DB_CLOSE_DELAY=-1 让库在连接关闭后仍存活),QueryRunner.update 建表并插入一行,QueryRunner.query 配 MapListHandler 把查询结果读成 List<Map>,最后从 jar 清单读出版本号。编译运行:
mvn -q compile exec:java -Dexec.mainClass=net.quzuo.demo.HelloDbUtils
说明:exec:java 来自 exec-maven-plugin,首次使用 Maven 会自动从中央仓库拉取该插件。实测回显:
查询结果: [{ID=1, MSG=hello commons dbutils}]
DbUtils 版本: 1.8.1
验证通过
三行输出分别确认了「建表-插入-查询链路」「jar 版本」「程序正常退出」,方案A安装完成。
四、方案B:官方发行包手动安装
方案B适合无法使用 Maven 的机器:从官方站点下载发行包,手动拼类路径编译运行。创建安装目录并下载:
sudo mkdir -p /opt/commons
cd /opt/commons
sudo curl -fsSLO https://downloads.apache.org/commons/dbutils/binaries/commons-dbutils-1.8.1-bin.tar.gz
sudo curl -fsSLO https://downloads.apache.org/commons/dbutils/binaries/commons-dbutils-1.8.1-bin.tar.gz.sha512
ls -l
实测回显:
total 1160
-rw-r--r-- 1 root root 1180308 Oct 13 16:39 commons-dbutils-1.8.1-bin.tar.gz
-rw-r--r-- 1 root root 129 Oct 13 16:39 commons-dbutils-1.8.1-bin.tar.gz.sha512
发行包 1,180,308 字节。.sha512 文件内容是裸哈希(129 字节:128 个十六进制字符加换行),校验时要把它拼成 哈希 文件名 的标准格式再交给 sha512sum -c:
printf '%s %s\n' "$(cat commons-dbutils-1.8.1-bin.tar.gz.sha512)" commons-dbutils-1.8.1-bin.tar.gz | sha512sum -c -
实测回显:
commons-dbutils-1.8.1-bin.tar.gz: OK
校验通过后解压并查看包内容:
sudo tar xzf commons-dbutils-1.8.1-bin.tar.gz
ls commons-dbutils-1.8.1/
实测回显:
LICENSE.txt
NOTICE.txt
RELEASE-NOTES.txt
apidocs
commons-dbutils-1.8.1-javadoc.jar
commons-dbutils-1.8.1-sources.jar
commons-dbutils-1.8.1-test-sources.jar
commons-dbutils-1.8.1-tests.jar
commons-dbutils-1.8.1.jar
关键点:发行包里只有 commons-dbutils-1.8.1.jar 一个主 jar,没有 lib/ 目录。查看主 jar 的清单可确认版本与 JDK 目标:
cd commons-dbutils-1.8.1
jar xf commons-dbutils-1.8.1.jar META-INF/MANIFEST.MF
cat META-INF/MANIFEST.MF | grep -E "Implementation-Version|X-Compile-Target-JDK|Import-Package"
实测回显:
Implementation-Version: 1.8.1
X-Compile-Target-JDK: 1.8
Import-Package: javax.sql
清单里没有 Main-Class,因此这个 jar 不是可执行 jar,直接 java -jar 会报错:
java -jar commons-dbutils-1.8.1/commons-dbutils-1.8.1.jar
实测回显:
no main manifest attribute, in commons-dbutils-1.8.1/commons-dbutils-1.8.1.jar
要验证功能,需要自行准备一个 JDBC 驱动,并从中央仓库下载 H2 jar 到 lib/:
cd /opt/commons/commons-dbutils-1.8.1
sudo mkdir -p lib && cd lib
sudo curl -fsSLO https://repo1.maven.org/maven2/com/h2database/h2/2.5.252/h2-2.5.252.jar
ls -l
实测回显:
total 2632
-rw-r--r-- 1 root root 2693360 Oct 13 16:44 h2-2.5.252.jar
写入与方案A相同逻辑的 HelloDbUtils.java(放到 /opt/commons/ 并去掉 package net.quzuo.demo; 首行)。编译并运行:
cd /opt/commons
javac -encoding UTF-8 -cp "commons-dbutils-1.8.1/commons-dbutils-1.8.1.jar:commons-dbutils-1.8.1/lib/*" HelloDbUtils.java -d out
java -Dfile.encoding=UTF-8 -cp "out:commons-dbutils-1.8.1/commons-dbutils-1.8.1.jar:commons-dbutils-1.8.1/lib/*" HelloDbUtils
实测回显:
查询结果: [{ID=1, MSG=hello commons dbutils}]
DbUtils 版本: 1.8.1
验证通过
注意 Linux 类路径分隔符是冒号 :(Windows 是分号),lib/* 中的星号由 JVM 自己展开。DbUtils 自身零依赖,但运行时仍需数据库配套的 JDBC 驱动;把驱动 jar 放进类路径即可,方案B安装完成。
五、方案对比与选型建议
| 对比项 | 方案A:Maven 依赖 | 方案B:发行包手动安装 |
|---|---|---|
| 依赖管理 | 自动引入本库(DbUtils 无传递依赖)+ 按需声明驱动 | 手动逐个下载,漏一个就运行报错 |
| 升级成本 | 改一行版本号重新构建 | 重新下载、校验、解压、改脚本 |
| 离线部署 | 需内网私服或预下载 | 天然离线友好 |
| 可复现性 | pom 锁版本,强 | 依赖脚本与人为记录 |
| 适用场景 | 一切有构建工具的工程 | 无 Maven 的跳板机、快速验证、交付现场 |
选型建议:开发/CI 环境一律方案A;目标机器没有 Maven 或需要临时排查时用方案B。方案B的驱动 jar(如 H2 2.5.252)也建议从中央仓库下载,保持与方案A一致的版本。
六、多版本管理
同一台机器上共存多个 Commons DbUtils 版本,推荐用「版本目录 + current 符号链接」的方式管理:所有版本平铺在 /opt/commons/ 下,current 指向当前生效版本,切换时只改链接。创建 1.8.1 与 1.7 两个版本目录:
cd /opt/commons
sudo mkdir -p commons-dbutils-1.8.1/lib commons-dbutils-1.7/lib
sudo curl -fsSL -o commons-dbutils-1.7/commons-dbutils-1.7.jar https://repo1.maven.org/maven2/commons-dbutils/commons-dbutils/1.7/commons-dbutils-1.7.jar
sudo curl -fsSL -o commons-dbutils-1.7/lib/h2-2.5.252.jar https://repo1.maven.org/maven2/com/h2database/h2/2.5.252/h2-2.5.252.jar
sudo ln -sfn commons-dbutils-1.8.1 current
ls -l
实测回显:
total 1176
-rw-r--r-- 1 root root 1013 Oct 13 16:32 HelloDbUtils.java
drwxr-xr-x 3 root root 4096 Oct 13 16:44 commons-dbutils-1.7
drwxr-xr-x 4 root root 4096 Oct 13 16:44 commons-dbutils-1.8.1
-rw-r--r-- 1 root root 1180308 Oct 13 16:39 commons-dbutils-1.8.1-bin.tar.gz
-rw-r--r-- 1 root root 129 Oct 13 16:39 commons-dbutils-1.8.1-bin.tar.gz.sha512
lrwxrwxrwx 1 root root 21 Oct 13 16:44 current -> commons-dbutils-1.8.1
drwxr-xr-x 2 root root 4096 Oct 13 16:44 out
用 current 链接编译运行一次验证程序(复用第四章的 HelloDbUtils.java):
cd /opt/commons
javac -encoding UTF-8 -cp "current/commons-dbutils-1.8.1.jar:current/lib/*" HelloDbUtils.java -d out
java -Dfile.encoding=UTF-8 -cp "out:current/commons-dbutils-1.8.1.jar:current/lib/*" HelloDbUtils
实测回显:
查询结果: [{ID=1, MSG=hello commons dbutils}]
DbUtils 版本: 1.8.1
验证通过
切换到 1.7 再运行(类路径改为 current/commons-dbutils-1.7.jar,版本号以程序打印为准):
sudo ln -sfn commons-dbutils-1.7 current
ls -l current
java -Dfile.encoding=UTF-8 -cp "out:current/commons-dbutils-1.7.jar:current/lib/*" HelloDbUtils
实测回显:
lrwxrwxrwx 1 root root 19 Oct 13 16:44 current -> commons-dbutils-1.7
查询结果: [{ID=1, MSG=hello commons dbutils}]
DbUtils 版本: 1.7
验证通过
程序打印的版本号随符号链接同步变化,证明切换生效。切回最新版:
sudo ln -sfn commons-dbutils-1.8.1 current
该命令无输出。这套机制的关键约束是:编译和运行都必须引用 current 路径,任何一处写死版本号目录,切换都会失效。
七、卸载
卸载分三部分:手动安装目录、Maven 本地仓库缓存,以及不再需要时的 JDK/Maven 本身。清理手动安装目录与验证产物:
sudo rm -rf /opt/commons
该命令无输出。Maven 本地仓库中 commons-dbutils 相关缓存约为 128KB,一并清理:
du -sh ~/.m2/repository/commons-dbutils
rm -rf ~/.m2/repository/commons-dbutils
实测回显(第一条命令):
128K /root/.m2/repository/commons-dbutils
卸载 JDK 17 与 Maven:
sudo dnf remove -y java-17-openjdk-devel maven
mvn -v
java -version
实测回显(输出节选,实测首尾):
Removing:
Removing unused dependencies:
Erasing : maven-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarc 1/135
Erasing : maven-lib-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.n 2/135
Erasing : maven-wagon-http-3.1.0-1.module_el8.0.0+39+6a9b6 3/135
...
bash: mvn: command not found
bash: java: command not found
mvn、java 命令消失即卸载完成。注意:本次 dnf remove 会把 Maven 依赖带入的 JDK 8 作为「无用依赖」一并清掉(实测删除 135 个包);~/.m2 中其他项目的依赖缓存不受影响。
八、FAQ
Q1:安装 Maven 后 java -version 为什么还是 1.8 而不是 17?
CentOS 8 的 maven 包依赖 java-1.8.0-openjdk,安装时会带入 JDK 8 且优先级高于 JDK 17。执行 alternatives --set java 与 alternatives --set javac 指向 JDK 17 目录即可(见第一章实测)。
Q2:alternatives --set java 之后 mvn -v 仍显示 Java 1.8?
Red Hat 打包的 Maven 脚本不跟随 alternatives。需显式 export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64,实测该变量生效后 mvn -v 显示 Java version: 17.0.1。
Q3:程序里打印的中文在终端显示成问号或乱码怎么办?
这是语言环境问题而不是库的问题。设置 export LANG=C.UTF-8(写入 ~/.bashrc),或运行时追加 -Dfile.encoding=UTF-8,实测 platform encoding 变为 UTF-8 后中文回显正常。
Q4:怎么确认 Commons DbUtils 的运行版本就是我想要的版本?
用第三章 HelloDbUtils 里的 QueryRunner.class.getPackage().getImplementationVersion(),它读取 jar 清单的 Implementation-Version,实测 1.8.1 打印 DbUtils 版本: 1.8.1。Maven 场景还可以用 mvn dependency:tree 核对解析结果。
Q5:Maven 里 org.apache.commons:commons-dbutils 拉不到依赖怎么办?
DbUtils 的 artifact groupId 是 commons-dbutils,不是 org.apache.commons。实测 org.apache.commons:commons-dbutils:1.8.1 对应 pom 地址 404。正确坐标是 commons-dbutils:commons-dbutils:1.8.1。
九、参考链接
- Apache Commons DbUtils 官方主页:https://commons.apache.org/proper/commons-dbutils/
- 1.8.1 发行包下载:https://downloads.apache.org/commons/dbutils/binaries/commons-dbutils-1.8.1-bin.tar.gz
- 发行包 sha512 校验文件:https://downloads.apache.org/commons/dbutils/binaries/commons-dbutils-1.8.1-bin.tar.gz.sha512
- Maven 中央仓库 1.8.1 目录(含 pom 与各分类 jar):https://repo1.maven.org/maven2/commons-dbutils/commons-dbutils/1.8.1/
- Apache 归档下载站(历史版本):https://archive.apache.org/dist/commons/dbutils/
- 官方 javadoc(1.8.1 在线 API 文档):https://commons.apache.org/proper/commons-dbutils/apidocs/
- H2 Database 主页:https://h2database.com/
- CentOS 的 alternatives 手册:https://man7.org/linux/man-pages/man8/alternatives.8.html