CentOS 8 安装 Apache Commons DBCP 指南
在 CentOS 8 搭建 Apache Commons DBCP 2.14.0 环境:装 JDK 17 与 Maven,给出 Maven 依赖与发行包两种方案,含 sha512 校验、基于 H2 的真实 JDBC 验证、多版本管理与卸载。
CentOS 8 安装 Apache Commons DBCP 指南
目标:在一台全新的 CentOS 8 服务器上搭建可编译、可运行 Apache Commons DBCP 2.14.0 的 Java 环境,并跑通一个真实的 JDBC 连接池示例。全部命令与回显已在 CentOS 8(JDK 17 + Maven)实测通过。
一、环境信息
本章先确认操作系统与语言环境,再安装 JDK 17 与 Maven,为后续获取 Commons DBCP 做准备。CentOS 8 与 Ubuntu 的最大差异是:系统通过 alternatives 管理多 JDK,且 maven 模块会连带装上 OpenJDK 8,需要显式指定 JDK 17。
1.1 确认系统版本
cat /etc/os-release | grep -E "^(NAME|VERSION)="
uname -m
实测回显:
NAME="CentOS Linux"
VERSION="8"
x86_64
1.2 安装 JDK 17 与 Maven
sudo dnf install -y java-17-openjdk-devel maven
实测回显(输出节选,实测首尾):
Dependencies resolved.
Installing:
Installing dependencies:
Installing weak dependencies:
Installed size: 184 M
...
Installed:
aopalliance-1.0-17.module_el8.0.0+39+6a9b6e22.noarch
apache-commons-cli-1.4-4.module_el8.0.0+39+6a9b6e22.noarch
guava20-20.0-8.module_el8.0.0+39+6a9b6e22.noarch
java-1.8.0-openjdk-1:1.8.0.312.b07-2.el8_5.x86_64
...
Complete!
⚠️ 注意上述依赖表里的 java-1.8.0-openjdk:CentOS 8 的 maven 模块会把 OpenJDK 8 一起装上,且 java 命令默认仍指向 8。先看默认版本:
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)
确认已装的两个 JDK:
rpm -qa | grep -i openjdk
ls /usr/lib/jvm/
实测回显:
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-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-1.8.0
java-17
java-17-openjdk
java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64
用 alternatives 把 java/javac 指到 17:
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
javac 17.0.1
再让 Maven 也用 17(maven 读取 JAVA_HOME,不设则仍走 8):
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
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_US, platform encoding: ANSI_X3.4-1968
Java version: 17.0.1 说明 Maven 已用上 JDK 17。把 export JAVA_HOME=/usr/lib/jvm/java-17-openjdk 追加到 ~/.bashrc 可持久生效:
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk' >> ~/.bashrc
该命令无输出。
1.3 语言环境设置
mvn -v 里的 platform encoding: ANSI_X3.4-1968 表示 Maven 进程的非 ASCII 编码未被正确设置,Java 程序输出中文会变问号。统一设置:
echo 'export LANG=C.UTF-8' >> ~/.bashrc
source ~/.bashrc
echo $LANG
实测回显:
C.UTF-8
💡 技术拓展:Apache Commons DBCP 只是「数据库连接池」大家庭中的一员。Java 连接池用于复用物理数据库连接、降低握手与鉴权开销,业界常见实现对比:
| 连接池 | 出身 | 特点 | 适用场景 |
|---|---|---|---|
| Commons DBCP2 | Apache,本文主角 | 纯 Java、API 简单、与 Tomcat/Spring 兼容广 | 传统项目、需轻量显式配置 |
| HikariCP | 社区 | 极致性能、极少参数、启动即调优 | 高并发新项目首选 |
| C3P0 | 社区 | 老牌、配置项多、曾与 Hibernate 绑定 | 存量 Hibernate 项目 |
| Druid | 阿里 | 自带监控台、SQL 防火墙、统计丰富 | 国内运维监控要求高 |
| Tomcat JDBC Pool | Apache Tomcat | DBCP 的替代品、异步取连接 | Tomcat 应用内 |
本文安装的是 Apache Commons DBCP2,理由:API 简单、BasicDataSource 一行代码即可创建池、与 Servlet 应用服务器的 JNDI 数据源机制同源,适合教学与中小规模部署。
二、版本选型
本章给出 DBCP 各版本的 JDK 要求对照,并锁定本文使用的版本、坐标与下载地址。DBCP 官方在下载页明确「三个版本对应不同 JDBC 规范」,选型时第一件事是核对目标环境的 JDK 版本。
2.1 版本对照
| 版本 | 发布状态 | JDBC 规范 | JDK 要求 | 必需传递依赖(实测) | 适用场景 |
|---|---|---|---|---|---|
| 2.14.0 | 最新稳定版 | JDBC 4.2 | Java 8 及以上 | commons-pool2 2.13.0、commons-logging 1.3.5、jakarta.transaction-api 1.3.3 | 新项目首选 |
| 2.13.0 | 稳定版 | JDBC 4.2 | Java 8 及以上 | commons-pool2 2.12.0、commons-logging 1.3.4、jakarta.transaction-api 1.3.3 | 2.14 有兼容顾虑时的回退 |
| 2.12.0 | 稳定版 | JDBC 4.2 | Java 8 及以上 | commons-pool2 2.12.0、commons-logging 1.3.4 | 存量项目锁版本 |
| 2.4.0 | 官方保留 | JDBC 4.1 | Java 7 | commons-pool2 2.x、commons-logging | 只能跑 JDK 7 的老系统 |
| 1.4 | 归档版本 | JDBC 4 | Java 6 | commons-pool 1.x、commons-logging | 只能跑 JDK 6 的遗留环境 |
关于「JDK 要求」的实测依据:解出 2.14.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 实测)。
选型结论:CentOS 8 自带 JDK 8 与 JDK 17 都可安装,但 2.14.0 建议直接用 JDK 17;只有 JDK 7 的机器退到 2.4.0;JDK 6 及以下必须用 1.4(坐标是 commons-dbcp:commons-dbcp,包名与 API 与 2.x 不同)。
2.2 JDBC 4.2 与 DBCP2 的对应关系
💡 技术拓展:DBCP 2.x 与 1.x 是两条并行的产品线,不要混用。差异对比如下:
| 维度 | DBCP 1.x | DBCP 2.x |
|---|---|---|
| Maven 坐标 | commons-dbcp:commons-dbcp | org.apache.commons:commons-dbcp2 |
| Java 包名 | org.apache.commons.dbcp | org.apache.commons.dbcp2 |
| 底层池实现 | commons-pool 1.x | commons-pool2 |
| 主入口类 | BasicDataSource | BasicDataSource(同名不同包) |
maxActive 参数 | 有 | 更名为 maxTotal |
maxWait 参数 | 有 | 更名为 maxWaitMillis |
| 连接有效性默认 | testOnBorrow=false | testOnBorrow=true |
本文全程使用 DBCP 2.x 产品线;从 1.x 迁来的项目要特别注意参数改名与包名替换。
2.3 坐标与下载地址
本文统一采用以下坐标与下载地址(均实测有效):
Maven 坐标:org.apache.commons:commons-dbcp2:2.14.0
发行包:https://downloads.apache.org/commons/dbcp/binaries/commons-dbcp2-2.14.0-bin.tar.gz
校验文件:https://downloads.apache.org/commons/dbcp/binaries/commons-dbcp2-2.14.0-bin.tar.gz.sha512
sha512(实测):
cef3d1fd5b7f5de1d8257dbee26f25dfff1a4525eb01ad528c0573f4bff5cf82d75c6872d8220e7dfd78f7eeac2497b9fd443d4a11a6d0ac361574a0df6357de
实测结论提前说明:downloads.apache.org 只保留最新版;旧版(如 2.13.0)需到 Maven 中央仓库 https://repo1.maven.org/maven2/org/apache/commons/commons-dbcp2/ 按版本取 jar。
三、方案A:Maven 中央仓库依赖
方案A通过 Maven 自动下载 jar 及其全部传递依赖,是工程化项目的推荐做法。先创建工程骨架:
mkdir -p /opt/dbcp-demo/src/main/java/net/quzuo/demo
cd /opt/dbcp-demo
该命令无输出。
3.1 编写 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>dbcp-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-dbcp2</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.5.252</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.1.0</version>
</plugin>
</plugins>
</build>
</project>
逐项说明:maven.compiler.source/target 指定按 Java 17 语法编译;commons-dbcp2 是库本体,其传递依赖由 Maven 自动带入;com.h2database:h2 是内嵌数据库驱动,用于给连接池接一个真实 JDBC 数据源;exec-maven-plugin 用于 mvn exec:java 直接跑示例类。
验证依赖解析结果(CentOS 8 的 Maven 3.5.4 需先 export JAVA_HOME=/usr/lib/jvm/java-17-openjdk):
mvn dependency:tree
实测回显(输出节选,实测首尾):
[INFO] +- org.apache.commons:commons-dbcp2:jar:2.14.0:compile
[INFO] | +- org.apache.commons:commons-pool2:jar:2.13.0:compile
[INFO] | +- commons-logging:commons-logging:jar:1.3.5:compile
[INFO] | \- jakarta.transaction:jakarta.transaction-api:jar:1.3.3:compile
[INFO] \- com.h2database:h2:jar:2.5.252:compile
[INFO] BUILD SUCCESS
四个 jar 都是 compile 作用域,即编译和运行都需要。这里实测到的关键点:DBCP 2.14.0 依赖的是 commons-pool2 2.13.0,这一行是后文「方案B 手动装依赖」的下载依据。
3.2 最小验证程序
写入 src/main/java/net/quzuo/demo/HelloDbcp.java:
package net.quzuo.demo;
import org.apache.commons.dbcp2.BasicDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class HelloDbcp {
public static void main(String[] args) throws Exception {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("org.h2.Driver");
ds.setUrl("jdbc:h2:mem:hello;DB_CLOSE_DELAY=-1");
ds.setUsername("sa");
ds.setPassword("");
ds.setMaxTotal(4);
ds.setMaxIdle(4);
try (Connection conn = ds.getConnection();
Statement st = conn.createStatement()) {
st.execute("CREATE TABLE t (id INT PRIMARY KEY, name VARCHAR(32))");
st.execute("INSERT INTO t VALUES (1,'dbcp')");
try (ResultSet rs = st.executeQuery("SELECT name FROM t WHERE id=1")) {
rs.next();
System.out.println("查询结果: " + rs.getString(1));
}
}
System.out.println("活跃连接数: " + ds.getNumActive());
System.out.println("空闲连接数: " + ds.getNumIdle());
System.out.println("commons-dbcp2 版本: " + BasicDataSource.class.getPackage().getImplementationVersion());
ds.close();
System.out.println("验证通过");
}
}
程序逻辑:用 BasicDataSource 直接当 DataSource 用,连到 H2 内存库 jdbc:h2:mem:hello;getConnection() 从池里取连接,做一次建表、插入、查询;getNumActive()/getNumIdle() 打印池的实时状态;最后从 jar 清单打印库版本。
3.3 编译运行
mvn -q compile exec:java -Dexec.mainClass=net.quzuo.demo.HelloDbcp
实测回显:
查询结果: dbcp
活跃连接数: 0
空闲连接数: 1
commons-dbcp2 版本: 2.14.0
验证通过
四行输出分别确认了「借连接 + JDBC 增删查」「池状态计数」「jar 版本」「程序正常退出」。若终端为 POSIX 编码,中文会显示为问号,追加 -Dfile.encoding=UTF-8 重跑即可得到上面的回显。方案A安装完成。
四、方案B:官方发行包手动安装
方案B适合无法使用 Maven 的机器:从官方站点下载发行包,手动拼类路径编译运行。
4.1 下载与 sha512 校验
sudo mkdir -p /opt/commons
cd /opt/commons
sudo curl -fsSLO https://downloads.apache.org/commons/dbcp/binaries/commons-dbcp2-2.14.0-bin.tar.gz
sudo curl -fsSLO https://downloads.apache.org/commons/dbcp/binaries/commons-dbcp2-2.14.0-bin.tar.gz.sha512
ls -l
实测回显:
total 2508
-rw-r--r-- 1 root root 2561948 Oct 13 16:31 commons-dbcp2-2.14.0-bin.tar.gz
-rw-r--r-- 1 root root 129 Oct 13 16:31 commons-dbcp2-2.14.0-bin.tar.gz.sha512
.sha512 文件内容是裸哈希(129 字节:128 个十六进制字符加换行),校验时要把它拼成 哈希 文件名 的标准格式再交给 sha512sum -c:
printf '%s %s\n' "$(cat commons-dbcp2-2.14.0-bin.tar.gz.sha512)" commons-dbcp2-2.14.0-bin.tar.gz | sha512sum -c -
实测回显:
commons-dbcp2-2.14.0-bin.tar.gz: OK
校验通过后解压并查看包内容:
sudo tar xzf commons-dbcp2-2.14.0-bin.tar.gz
ls -l commons-dbcp2-2.14.0/
实测回显:
total 1928
-rw-r--r-- 1 root root 11359 Dec 11 2025 LICENSE.txt
-rw-r--r-- 1 root root 174 Dec 11 2025 NOTICE.txt
-rw-r--r-- 1 root root 55959 Dec 11 2025 RELEASE-NOTES.txt
drwxr-xr-x 7 root root 4096 Dec 11 2025 apidocs
-rw-r--r-- 1 root root 983445 Dec 11 2025 commons-dbcp2-2.14.0-javadoc.jar
-rw-r--r-- 1 root root 199925 Dec 11 2025 commons-dbcp2-2.14.0-sources.jar
-rw-r--r-- 1 root root 173007 Dec 11 2025 commons-dbcp2-2.14.0-test-sources.jar
-rw-r--r-- 1 root root 305840 Dec 11 2025 commons-dbcp2-2.14.0-tests.jar
-rw------- 1 root root 222783 Dec 11 2025 commons-dbcp2-2.14.0.jar
关键点:发行包里只有 commons-dbcp2-2.14.0.jar 一个主 jar,没有 lib/ 目录,必需依赖需要自行下载。
4.2 发行包无命令行入口与依赖补全
先验证 DBCP 主 jar 不能当命令行工具用——它没有声明 Main-Class:
cd /opt/commons/commons-dbcp2-2.14.0
java -jar commons-dbcp2-2.14.0.jar
echo "退出码: $?"
实测回显:
no main manifest attribute, in commons-dbcp2-2.14.0.jar
退出码: 1
DBCP 只能作为库存在。手动补齐依赖:按第三章 mvn dependency:tree 实测出的版本,把四个 jar 下载到主 jar 旁的 lib/:
cd /opt/commons/commons-dbcp2-2.14.0
sudo mkdir -p lib
cd lib
sudo curl -fsSLO https://repo1.maven.org/maven2/org/apache/commons/commons-pool2/2.13.0/commons-pool2-2.13.0.jar
sudo curl -fsSLO https://repo1.maven.org/maven2/commons-logging/commons-logging/1.3.5/commons-logging-1.3.5.jar
sudo curl -fsSLO https://repo1.maven.org/maven2/jakarta/transaction/jakarta.transaction-api/1.3.3/jakarta.transaction-api-1.3.3.jar
sudo curl -fsSLO https://repo1.maven.org/maven2/com/h2database/h2/2.5.252/h2-2.5.252.jar
ls -l
实测回显:
total 2880
-rw-r--r-- 1 root root 73737 Oct 13 16:39 commons-logging-1.3.5.jar
-rw-r--r-- 1 root root 156676 Oct 13 16:39 commons-pool2-2.13.0.jar
-rw-r--r-- 1 root root 2693360 Oct 13 16:39 h2-2.5.252.jar
-rw-r--r-- 1 root root 15392 Oct 13 16:39 jakarta.transaction-api-1.3.3.jar
缺任意一个都会在运行期抛 NoClassDefFoundError:缺 commons-pool2 时找不到池实现类,缺 commons-logging 时找不到日志工厂类,因此三个 jar 必须同时出现在类路径上。
4.3 编译运行验证
写入与方案A逻辑相同的验证程序 /opt/commons/HelloDbcp.java(去掉 package net.quzuo.demo; 首行,其余内容一致),编译并运行:
cd /opt/commons
javac -encoding UTF-8 -cp "commons-dbcp2-2.14.0/commons-dbcp2-2.14.0.jar:commons-dbcp2-2.14.0/lib/*" HelloDbcp.java
java -Dfile.encoding=UTF-8 -cp ".:commons-dbcp2-2.14.0/commons-dbcp2-2.14.0.jar:commons-dbcp2-2.14.0/lib/*" HelloDbcp
实测回显:
查询结果: dbcp
活跃连接数: 0
空闲连接数: 1
commons-dbcp2 版本: 2.14.0
验证通过
类路径写法要点:Linux 分隔符是冒号 :;开头的 . 让 JVM 找到当前目录的 HelloDbcp.class;lib/* 中的星号由 JVM 自己展开。方案B安装完成。
五、方案对比与选型建议
| 对比项 | 方案A:Maven 依赖 | 方案B:发行包手动安装 |
|---|---|---|
| 依赖管理 | 自动引入 pool2、logging、transaction-api | 手动逐个下载,漏一个就运行报错 |
| 升级成本 | 改一行版本号重新构建 | 重新下载、校验、解压、改脚本 |
| 离线部署 | 需内网私服或预下载 | 天然离线友好 |
| 可复现性 | pom 锁版本,强 | 依赖脚本与人为记录 |
| 适用场景 | 一切有构建工具的工程 | 无 Maven 的跳板机、快速验证、交付现场 |
选型建议:开发/CI 环境一律方案A;目标机器没有 Maven 或需要临时排查时用方案B;方案B 的依赖 jar 也建议从中央仓库按 mvn dependency:tree 实测出的版本号下载,避免混用其他版本。
六、多版本管理
同一台机器上共存多个 DBCP 版本,推荐用「版本目录 + current 符号链接」的方式管理:所有版本平铺在 /opt/commons/ 下,current 指向当前生效版本,切换时只改链接。核心技巧是把主 jar 也放进每版的 lib/,这样类路径可以统一写成 current/lib/*。
创建 2.13.0 目录并放入其主 jar 与按 2.13.0 依赖实测版本(pool2 2.12.0、logging 1.3.4、transaction-api 1.3.3)下载的 jar:
cd /opt/commons
sudo mkdir -p commons-dbcp2-2.13.0/lib
sudo cp commons-dbcp2-2.14.0/commons-dbcp2-2.14.0.jar commons-dbcp2-2.14.0/lib/
cd commons-dbcp2-2.13.0/lib
sudo curl -fsSLO https://repo1.maven.org/maven2/org/apache/commons/commons-dbcp2/2.13.0/commons-dbcp2-2.13.0.jar
sudo curl -fsSLO https://repo1.maven.org/maven2/org/apache/commons/commons-pool2/2.12.0/commons-pool2-2.12.0.jar
sudo curl -fsSLO https://repo1.maven.org/maven2/commons-logging/commons-logging/1.3.4/commons-logging-1.3.4.jar
sudo curl -fsSLO https://repo1.maven.org/maven2/jakarta/transaction/jakarta.transaction-api/1.3.3/jakarta.transaction-api-1.3.3.jar
sudo curl -fsSLO https://repo1.maven.org/maven2/com/h2database/h2/2.5.252/h2-2.5.252.jar
cd /opt/commons
sudo ln -sfn commons-dbcp2-2.14.0 current
ls -l
实测回显(输出节选,实测首尾):
total 2528
drwxr-xr-x 3 root root 4096 Oct 13 16:39 commons-dbcp2-2.13.0
drwxr-xr-x 4 root root 4096 Oct 13 16:31 commons-dbcp2-2.14.0
-rw-r--r-- 1 root root 2561948 Oct 13 16:31 commons-dbcp2-2.14.0-bin.tar.gz
lrwxrwxrwx 1 root root 20 Oct 13 16:39 current -> commons-dbcp2-2.14.0
用 current 链接编译运行一次验证程序(复用第四章的 HelloDbcp.java):
cd /opt/commons
javac -encoding UTF-8 -cp "current/lib/*" HelloDbcp.java -d out
java -Dfile.encoding=UTF-8 -cp "out:current/lib/*" HelloDbcp | tail -2
实测回显:
commons-dbcp2 版本: 2.14.0
验证通过
切换到 2.13.0 再运行:
sudo ln -sfn commons-dbcp2-2.13.0 current
java -Dfile.encoding=UTF-8 -cp "out:current/lib/*" HelloDbcp | tail -2
实测回显:
commons-dbcp2 版本: 2.13.0
验证通过
程序打印的版本号随符号链接同步变化,证明切换生效。切回最新版:
sudo ln -sfn commons-dbcp2-2.14.0 current
该命令无输出。这套机制的关键约束是:编译和运行都必须引用 current 路径,任何一处写死版本号目录,切换都会失效。
七、卸载
卸载分三部分:手动安装目录、Maven 本地仓库缓存、以及不再需要的 JDK/Maven 本身。清理手动安装目录与验证产物:
sudo rm -rf /opt/commons
该命令无输出。Maven 本地仓库中 commons-dbcp2 相关缓存很小,先看再删:
du -sh ~/.m2/repository/org/apache/commons/commons-dbcp2
rm -rf ~/.m2/repository/org/apache/commons/commons-dbcp2
实测回显(第一条命令):
260K /root/.m2/repository/org/apache/commons/commons-dbcp2
若 JDK 17 与 Maven 也不再有他用,先看会移除哪些包再执行:
sudo dnf remove maven java-17-openjdk-devel --assumeno
实测回显(输出节选,实测首尾):
Removing:
Removing unused dependencies:
Remove 49 Packages
Operation aborted.
确认无误后执行实际卸载并验证命令消失:
sudo dnf remove -y maven java-17-openjdk-devel
java -version
mvn -v
实测回显(输出节选,实测首尾):
Removing java-17-openjdk-devel-1:17.0.1.0.12-2.el8_5.x86_64 ...
Removing maven-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch ...
bash: java: command not found
bash: mvn: command not found
注意:dnf remove maven 会连带移除它带入的 java-1.8.0-openjdk 等依赖;若只想卸载库本身,执行前两步删除安装目录与 Maven 缓存即可。
八、FAQ
Q1:装完 java -version 还是 1.8,怎么办?
CentOS 8 的 maven 模块默认拉入 OpenJDK 8 并把它设为 alternatives 首选。用两行命令切到 17:sudo alternatives --set java /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java 与 javac 同理(第一章实测),再 export JAVA_HOME=/usr/lib/jvm/java-17-openjdk 让 Maven 也用 17。
Q2:mvn -v 里 Java version 显示 1.8 或 platform encoding 是 ANSI_X3.4-1968?
前者是没设 JAVA_HOME,后者是没设 LANG。分别执行 export JAVA_HOME=/usr/lib/jvm/java-17-openjdk 与 export LANG=C.UTF-8,写入 ~/.bashrc 持久生效(第一章实测)。
Q3:运行时报 NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPool 怎么办?
这是方案B 漏装传递依赖导致。DBCP 2.14.0 必需 commons-pool2 2.13.0、commons-logging 1.3.5、jakarta.transaction-api 1.3.3 三个 jar,任一缺失都会在 BasicDataSource.getConnection() 首次触发 new GenericObjectPool 时抛错。按第四章把三个 jar 放进 lib/ 重跑即可。
Q4:怎么确认程序用的 DBCP 版本就是我想要的版本?
用第三章 HelloDbcp 里的 BasicDataSource.class.getPackage().getImplementationVersion(),它读取 jar 清单里的 Implementation-Version,实测 2.14.0 会打印 commons-dbcp2 版本: 2.14.0。Maven 场景还可以用 mvn dependency:tree 核对解析结果。
Q5:downloads.apache.org 上找不到旧版本怎么办?
官方只在主下载目录保留最新版,旧版(如 2.13.0)在 https://archive.apache.org/dist/commons/dbcp/binaries/,更推荐直接从 Maven 中央仓库 https://repo1.maven.org/maven2/org/apache/commons/commons-dbcp2/ 按版本取 jar。
九、参考链接
- Apache Commons DBCP 官方主页:https://commons.apache.org/proper/commons-dbcp/
- 2.14.0 发行包下载:https://downloads.apache.org/commons/dbcp/binaries/commons-dbcp2-2.14.0-bin.tar.gz
- 发行包 sha512 校验文件:https://downloads.apache.org/commons/dbcp/binaries/commons-dbcp2-2.14.0-bin.tar.gz.sha512
- Maven 中央仓库 2.14.0 目录(含 pom 与各分类 jar):https://repo1.maven.org/maven2/org/apache/commons/commons-dbcp2/2.14.0/
- Apache 归档下载站(历史版本):https://archive.apache.org/dist/commons/dbcp/binaries/
- 官方 javadoc(2.14.0 在线 API 文档):https://commons.apache.org/proper/commons-dbcp/apidocs/
- H2 Database 官网(示例所用内嵌数据库):https://h2database.com/
- CentOS 8 OpenJDK 17 软件包:https://pkgs.org/search/?q=java-17-openjdk-devel