CentOS 8 安装 Apache Axis2 指南
在 CentOS 8 从零安装 Apache Axis2 2.0.1:vault 源与 JDK 17 切换、官方二进制包 standalone 部署、Tomcat 10.1 war 部署、堆限制、systemd 托管与卸载,全程实测。
CentOS 8 安装 Apache Axis2 指南
目标:在 CentOS 8 服务器上从零安装并运行 Apache Axis2 2.0.1,覆盖 vault 归档源切换、JDK 17 安装与版本切换、官方二进制发行包 standalone 部署、Tomcat 10.1 war 部署两种方案、JVM 堆内存限制与 systemd 托管,已在 CentOS 8.4.2105(OpenJDK 17.0.1)实测通过。
一、环境信息
本篇所有命令与回显均在以下环境中实测采集,复现时请保持相近版本:
- 操作系统:CentOS Linux 8.4.2105,x86_64
- JDK:OpenJDK 17.0.1(
java-17-openjdk-devel-17.0.1.0.12-2.el8_5,系统仓库;系统另预装 OpenJDK 1.8.0_312) - 组件版本:Apache Axis2 2.0.1(downloads 站点当前最新版,2026-10 实测在架 1.8.0 / 1.8.2 / 2.0.0 / 2.0.1)
- Servlet 容器(方案 B):Apache Tomcat 10.1.61
- 服务端口:HTTP 8080(standalone / war 默认)
- 安装目录:
/opt/axis2(standalone)、/opt/tomcat10(war) - 执行用户:root
💡 说明:Axis2 2.0.1 的类文件版本为 61.0(Java 17 编译),实测在 OpenJDK 1.8.0_312 上启动直接报
UnsupportedClassVersionError(见"常见问题"),因此 CentOS 8 环境必须先完成 JDK 17 的安装与切换,这是本篇把 JDK 章节放在最前面的原因。
二、前置条件
本节确认系统版本、软件源可用性,并完成 JDK 17 的安装与切换。CentOS 8 官方源已下线,任何软件安装都要先切 vault 归档源;Axis2 2.0.1 依赖 JDK 17+ 运行环境。
2.1 确认系统版本与切换 vault 源
cat /etc/redhat-release
回显(实测):
CentOS Linux release 8.4.2105
检查软件源指向(本机已切换到 vault 归档站):
grep -h baseurl /etc/yum.repos.d/CentOS-Linux-AppStream.repo /etc/yum.repos.d/CentOS-Linux-BaseOS.repo
回显(实测):
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/8.5.2111/AppStream/x86_64/os/
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/8.5.2111/BaseOS/x86_64/os/
若你的机器仍指向已下线的 mirror.centos.org,执行以下命令整体替换为 vault 归档源后重建缓存:
sed -i -e 's|mirror.centos.org|vault.centos.org|g' -e 's|^#baseurl=http://vault|baseurl=http://vault|g' /etc/yum.repos.d/CentOS-Linux-*.repo
dnf clean all && dnf repolist
回显(实测):
repo id repo name
AppStream CentOS Linux 8 - AppStream
BaseOS CentOS Linux 8 - BaseOS
能列出 AppStream 与 BaseOS 两个仓库即源可用。
2.2 安装基础工具
dnf install -y wget unzip which
回显(实测,本机已随系统预装,故显示无需新装):
Package wget-1.19.5-10.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
Complete! 即工具就绪;全新系统会列出下载明细,同样以 Complete! 收尾。
2.3 安装 JDK 17 并切换系统默认 Java
Axis2 2.0.1 要求 Java 17+。安装 java-17-openjdk-devel(含编译工具,war 方案与代码生成工具都会用到):
dnf install -y java-17-openjdk-devel java-1.8.0-openjdk-devel
回显(实测,节选):
Installed:
java-1.8.0-openjdk-devel-1:1.8.0.312.b07-2.el8_5.x86_64
java-17-openjdk-1:17.0.1.0.12-2.el8_5.x86_64
java-17-openjdk-devel-1:17.0.1.0.12-2.el8_5.x86_64
java-17-openjdk-headless-1:17.0.1.0.12-2.el8_5.x86_64
Complete!
查看当前系统默认 java(CentOS 8 预装 1.8 时默认仍指向 1.8):
java -version 2>&1 | head -1
回显(实测,切换前):
openjdk version "1.8.0_312"
用 alternatives 把系统默认 java 切到 17(--set 幂等,重复执行无副作用):
alternatives --set java java-17-openjdk.x86_64
回显(实测,成功无输出):
再次验证版本与 JDK 完整性:
java -version 2>&1 | head -1
javac -version
回显(实测):
openjdk version "17.0.1" 2021-10-19 LTS
javac 17.0.1
java -version 输出 17.0.1、javac 可用,JDK 前置完成。
💡 技术拓展:JDK 版本管理方式对比——
方式 原理 适用场景 alternatives --set 系统级符号链接切换 /usr/bin/java指向全机统一默认版本,最常用 JAVA_HOME 环境变量 仅对读取该变量的脚本生效 按应用隔离版本 显式 PATH 前置 PATH=<jdk>/bin:$PATH临时覆盖会话级临时试验 ⚠️ 注意:Axis2 的启动脚本 axis2server.sh 实际执行的是 PATH 中的
java命令(实测确认),仅设置 JAVA_HOME 而不切换系统 java 时,运行的仍是旧版本 JVM 并报 UnsupportedClassVersionError。本篇采用 alternatives 全局切换,为最稳做法。
三、版本选型说明
下载前先确认版本选型。官方下载站 https://dlcdn.apache.org/axis/axis2/java/core/ 2026-10 实测在架版本与文件如下:
| 版本线 | 在架版本 | 发行包 | Java 要求(实测) | 说明 |
|---|---|---|---|---|
| 2.0.x | 2.0.0 / 2.0.1 | axis2-<ver>-bin.zip、axis2-<ver>-war.zip | Java 17+(类文件 61.0,JDK 8 实测报错) | 当前最新主线,jakarta.servlet |
| 1.8.x | 1.8.0 / 1.8.2 | axis2-<ver>-bin.zip | Java 8+(JDK 8/17 实测均可运行) | 维护线,需修一处发行包脚本 bug(见常见问题) |
关键差异:2.0.1 基于 jakarta.servlet 命名空间(war 方案必须 Tomcat 10.1+),1.8.2 基于 javax.servlet(Tomcat 9 可用);新部署优先选 2.0.1,需兼容 JDK 8 老环境时选 1.8.2。
本篇以 2.0.1 为主线。发行包形态说明:bin 为独立服务器发行包(自带启动脚本,无需 Servlet 容器),war 为 Web 归档(部署到 Tomcat 等 Servlet 容器)。
四、方案 A:官方二进制发行包部署(standalone)
standalone 方案使用官方 bin 包自带的 SimpleAxis2Server 直接对外提供 HTTP 服务,不依赖 Tomcat,是验证与轻量场景最快的路径。
4.1 下载与校验
创建安装目录并下载官方发行包与校验文件:
mkdir -p /opt/software && cd /opt/software
wget https://dlcdn.apache.org/axis/axis2/java/core/2.0.1/axis2-2.0.1-bin.zip
wget https://dlcdn.apache.org/axis/axis2/java/core/2.0.1/axis2-2.0.1-bin.zip.sha512
ls -la
回显(实测):
-rw-r--r-- 1 root root 104726301 May 18 00:26 axis2-2.0.1-bin.zip
-rw-r--r-- 1 root root 128 May 18 00:26 axis2-2.0.1-bin.zip.sha512
官方 .sha512 文件是 128 位裸哈希(无换行、无文件名),sha512sum -c 无法直接使用,用比对法校验:
[ "$(sha512sum axis2-2.0.1-bin.zip | awk '{print $1}')" = "$(cat axis2-2.0.1-bin.zip.sha512)" ] && echo "sha512 OK"
回显(实测):
sha512 OK
输出 sha512 OK 即包完整。若不匹配请重新下载,不要强行安装。
4.2 解压安装到 /opt/axis2
unzip -q axis2-2.0.1-bin.zip
mv axis2-2.0.1 /opt/axis2
ls /opt/axis2
回显(实测):
LICENSE.txt NOTICE.txt README-std-bin.txt README.txt RELEASE-NOTE.txt
bin conf installation-std-bin.txt lib modules repository webapp
目录结构解读:bin 启动与代码生成脚本;conf 全局配置(axis2.xml、log4j2.xml);lib 运行时 jar;modules 模块(.mar);repository 服务仓库(services 目录放 .aar);webapp war 打包素材。查看启动脚本清单:
ls /opt/axis2/bin
回显(实测):
axis2.bat axis2server.bat java2wsdl.bat setenv.sh wsdl2java.bat
axis2.sh axis2server.sh java2wsdl.sh wsdl2java.sh
4.3 限制 JVM 堆内存(256-512MB)
启动脚本默认不限制堆大小,为避免占用过多内存,把堆限制在 256-512MB 区间。修改点在 /opt/axis2/bin/axis2server.sh 第 35 行,脚本内部会将 JAVA_OPTS 置空重写(外部环境变量注入无效,实测确认),必须直接编辑该行:
sed -i 's/^JAVA_OPTS=""/JAVA_OPTS="-Xms256m -Xmx512m"/' /opt/axis2/bin/axis2server.sh
grep -n '^JAVA_OPTS=' /opt/axis2/bin/axis2server.sh | head -1
回显(实测):
35:JAVA_OPTS="-Xms256m -Xmx512m"
修改结果确认,第 35 行已带堆参数。
4.4 启动 standalone 服务
脚本要求 JAVA_HOME 必须设置(为空时直接退出),先声明再启动:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64
export AXIS2_HOME=/opt/axis2
nohup /opt/axis2/bin/axis2server.sh > /var/log/axis2.log 2>&1 &
sleep 20
tail -3 /var/log/axis2.log
回显(实测):
09:33:16.862 [HttpListener-8080-1] INFO org.apache.axis2.transport.http.server.DefaultConnectionListener - Listening on port 8080
09:33:16.869 [main] INFO org.apache.axis2.kernel.SimpleAxis2Server - [SimpleAxisServer] Started
[SimpleAxisServer] Started
日志出现 Listening on port 8080 与 [SimpleAxisServer] Started 即启动成功。日志前段还会逐条打印部署的 5 个模块(mex、jaxws、addressing、ping、mtompolicy)与内置 Version 服务。
验证堆参数生效(jps -v 直接查看 JVM 进程参数):
$JAVA_HOME/bin/jps -v | grep SimpleAxis2Server
回显(实测):
737 SimpleAxis2Server -Xms256m -Xmx512m
-Xms256m -Xmx512m 出现在进程参数中,堆限制确认生效。
4.5 验证服务可用
调用内置 Version 服务(独立服务器的 REST 直调形态):
curl -s "http://localhost:8080/axis2/services/Version/getVersion"
回显(实测):
<ns:getVersionResponse xmlns:ns="http://axisversion.sample"><ns:return>Hi - the Axis2 version is 2.0.1</ns:return></ns:getVersionResponse>
返回 Hi - the Axis2 version is 2.0.1 即服务端正常。再查看服务列表页(standalone 由 ListingAgent 渲染,注意 URL 必须带尾部斜杠):
curl -s "http://localhost:8080/axis2/services/"
回显(实测,未部署其他服务时):
<html><head><title>Axis2: Services</title></head><body><h2>Deployed services</h2><h3><a href="Version?wsdl">Version</a></h3>Available operations <ul><li>getVersion</li></ul></body></html>
⚠️ 注意:独立服务器的服务列表地址是
/axis2/services/(带斜杠);访问/axis2/services/ListServices会返回 501 Not Implemented,访问不带斜杠的/axis2/services返回空响应,这是 standalone 与 war 的行为差异,不要误判为服务未启动。
4.6 systemd 托管
把 standalone 服务注册为系统服务,实现开机自启与故障自动拉起。创建服务单元文件 /etc/systemd/system/axis2.service:
cat > /etc/systemd/system/axis2.service << 'EOF'
[Unit]
Description=Apache Axis2 Standalone Server
After=network.target
[Service]
Type=simple
User=root
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64
Environment=AXIS2_HOME=/opt/axis2
ExecStart=/opt/axis2/bin/axis2server.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
⚠️ 注意:
JAVA_HOME的实际路径以ls -d /usr/lib/jvm/java-17-openjdk-*查到的为准写入,且单元内必须显式声明 JAVA_HOME 与 AXIS2_HOME——systemd 服务不继承 shell 环境,缺失时启动脚本会报 "You must set the JAVA_HOME variable before running Axis2 Script." 并退出。
注册并启动:
kill $(jps | grep SimpleAxis2Server | awk '{print $1}')
systemctl daemon-reload
systemctl enable axis2
systemctl start axis2
sleep 16
systemctl is-active axis2
回显(实测):
Created symlink /etc/systemd/system/multi-user.target.wants/axis2.service → /etc/systemd/system/axis2.service.
active
enable 输出 Created symlink 即注册成功,is-active 输出 active 即托管生效。业务面复验:
curl -s "http://localhost:8080/axis2/services/Version/getVersion"
jps -v | grep SimpleAxis2Server
回显(实测):
<ns:getVersionResponse xmlns:ns="http://axisversion.sample"><ns:return>Hi - the Axis2 version is 2.0.1</ns:return></ns:getVersionResponse>
868 SimpleAxis2Server -Xms256m -Xmx512m
服务可调用、堆参数在 systemd 托管下依然生效。停止与重启:
systemctl stop axis2
systemctl is-active axis2
回显(实测):
inactive
stop 后 is-active 输出 inactive,启动/停止闭环验证完成。
五、方案 B:axis2.war + Tomcat 10.1 部署
war 方案把 Axis2 部署进 Servlet 容器,适合与既有 Java Web 应用共存、需要 axis2-web 管理页面的场景。Axis2 2.0.1 使用 jakarta.servlet 命名空间,实测必须 Tomcat 10.1+(Tomcat 9 启动即报 ClassNotFoundException,见常见问题)。
5.1 下载并安装 Tomcat 10.1
cd /opt/software
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.61/bin/apache-tomcat-10.1.61.tar.gz
tar xzf apache-tomcat-10.1.61.tar.gz
mv apache-tomcat-10.1.61 /opt/tomcat10
/opt/tomcat10/bin/version.sh | grep -E "Server version|JVM"
回显(实测):
Server version: Apache Tomcat/10.1.61
JVM Version: 17.0.1+12-39
Tomcat 10.1.61 与 JVM 17 就绪。
5.2 下载并部署 axis2.war
cd /opt/software
wget https://dlcdn.apache.org/axis/axis2/java/core/2.0.1/axis2-2.0.1-war.zip
unzip -q -o axis2-2.0.1-war.zip
ls -la axis2.war
回显(实测):
-rw-r--r-- 1 root root 37418722 May 17 23:08 axis2.war
放入 Tomcat 并启动:
cp axis2.war /opt/tomcat10/webapps/
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64
/opt/tomcat10/bin/startup.sh
sleep 20
grep -E "Deploying web application archive|BindException" /opt/tomcat10/logs/catalina.out | tail -2
回显(实测):
Deploying web application archive [/opt/tomcat10/webapps/axis2.war]
出现 Deploying 且无 BindException 即部署完成。若与方案 A 同时使用,两者默认都监听 8080,Tomcat 启动会报 BindException(实测日志含 Caused by: java.net.BindException: Address already in use),此时应停用其中一个或修改端口。
5.3 验证 war 部署
war 模式下服务列表页是 axis2-web 的 listServices 页面(与 standalone 不同):
curl -s -o /dev/null -w "%{http_code}\n" "http://localhost:8080/axis2/services/listServices"
curl -s "http://localhost:8080/axis2/services/Version?getVersion"
回显(实测):
200
<ns:getVersionResponse xmlns:ns="http://axisversion.sample"><ns:return>Hi - the Axis2 version is 2.0.1</ns:return></ns:getVersionResponse>
listServices 返回 200、Version 服务正常回显,war 部署验证通过。
5.4 自定义服务仓库路径
war 默认使用应用内部的 WEB-INF/services 目录(初始仅含 version 服务),热部署外部服务需显式指定仓库路径。编辑 /opt/tomcat10/webapps/axis2/WEB-INF/web.xml,在 AxisServlet 的 <servlet> 段内(原注释 init-param 之后)加入 init-param:
<init-param>
<param-name>axis2.repository.path</param-name>
<param-value>/opt/axis2-repo</param-value>
</init-param>
准备外部仓库并重启 Tomcat:
mkdir -p /opt/axis2-repo/services /opt/axis2-repo/modules
cp /opt/axis2/repository/modules/*.mar /opt/axis2-repo/modules/
/opt/tomcat10/bin/shutdown.sh
sleep 5
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64
/opt/tomcat10/bin/startup.sh
sleep 20
curl -s "http://localhost:8080/axis2/services/listServices" | grep -oE "services/[A-Za-z]+\?wsdl" | sort -u
回显(实测,向 /opt/axis2-repo/services 放入服务包后):
services/HelloService?wsdl
services/Version?wsdl
外部仓库中的服务被 war 正常加载,仓库指向生效。
六、方案对比与选择建议
| 维度 | 方案 A:bin standalone | 方案 B:war + Tomcat 10.1 |
|---|---|---|
| 版本 | 2.0.1 | 2.0.1 |
| 是否需联网 | 下载时需要 | 下载时需要 |
| 依赖 | 仅 JDK 17+ | JDK 17+ 与 Tomcat 10.1+ |
| 服务管理 | 自带 systemd 单元 | Tomcat 生命周期托管 |
| 监听端口 | 8080(axis2.xml 可改) | 8080(server.xml 可改) |
| 管理页面 | 无(仅 /axis2/services/ 列表) | 有 axis2-web(listServices、HappyAxis) |
| 优点 | 轻、启动快、零额外组件 | 与 Web 应用共存、仓库路径灵活 |
| 缺点 | 无管理 UI、传输组件按需改配置 | 多一层容器、占 8080 需规划端口 |
选择建议:仅做服务端快速验证或单机轻量部署选方案 A;生产与既有 Web 应用共容器、需要管理页面和灵活仓库布局选方案 B。两者服务仓库格式(.aar/.mar)完全一致,可随时迁移。
七、配置说明
两方案共用的关键配置项与位置:
| 配置项 | 位置 | 说明 |
|---|---|---|
| JVM 堆 | /opt/axis2/bin/axis2server.sh 第 35 行 JAVA_OPTS | 实测改为 -Xms256m -Xmx512m 后 jps -v 可见生效 |
| HTTP 监听端口 | /opt/axis2/conf/axis2.xml transportReceiver http 的 port 参数 | 默认 8080,改动后重启生效 |
| 全局参数 | /opt/axis2/conf/axis2.xml | 热部署、MTOM、REST 等开关 |
| 日志级别 | /opt/axis2/conf/log4j2.xml | root level 默认 INFO,改 DEBUG 会输出大量日志 |
| JAVA_HOME | systemd 单元 Environment= 或 shell 环境 | 脚本强校验,缺失即退出 |
systemd 托管下修改 JVM 参数后需 systemctl daemon-reload(若改了单元文件)并 systemctl restart axis2,再用 jps -v 复核,避免"改了没生效"。
八、常见问题(FAQ)
Q1:启动报 UnsupportedClassVersionError,如何解决? 报错原文(实测):
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/axis2/kernel/SimpleAxis2Server has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
原因:Axis2 2.0.1 类文件是 Java 17 编译(61.0),当前运行的 java 是 1.8(52.0)。解决:alternatives --set java java-17-openjdk.x86_64 切换系统 java 后重启(实测恢复)。确认方法:java -version 应输出 17.x。
Q2:Tomcat 9 部署 axis2.war 后所有请求都 404/资源未找到?
实测 /opt/tomcat9/logs/localhost.<date>.log 报:
SEVERE [main] org.apache.catalina.core.StandardContext.loadOnStartup Servlet [AxisServlet] in web application [/axis2] threw load() exception
java.lang.ClassNotFoundException: jakarta.servlet.http.HttpServlet
原因:Axis2 2.0.1 基于 jakarta.servlet,Tomcat 9 只提供 javax.servlet。解决:换用 Tomcat 10.1+(本篇方案 B 实测 10.1.61 正常)。
Q3:Tomcat 启动后访问到的却是独立服务器的页面?
两进程抢同一 8080 端口。实测 catalina.out 含 java.net.BindException: Address already in use,此时 Tomcat 连接器未启动,所有请求由先占端口的 standalone 响应。解决:停用其一或错开端口(如 Tomcat 改 18080 后重测,listServices 返回 200)。
Q4:1.8.2 启动报 Could not find or load main class? 报错原文(实测,任何 JDK 下均复现):
Error: Could not find or load main class org.apache.axis2.transport.SimpleAxis2Server
Caused by: java.lang.ClassNotFoundException: org.apache.axis2.transport.SimpleAxis2Server
原因:1.8.2 发行包 axis2server.sh 第 64 行写错主类包名(transport),实际类在 lib/axis2-kernel-1.8.2.jar 的 org/apache/axis2/kernel/SimpleAxis2Server。解决:
sed -i 's/org.apache.axis2.transport.SimpleAxis2Server/org.apache.axis2.kernel.SimpleAxis2Server/' /opt/axis2/bin/axis2server.sh
修复后 1.8.2 在 JDK 8 与 JDK 17 上实测均能正常启动并返回 Hi - the Axis2 version is 1.8.2。
Q5:防火墙需开放哪些端口? standalone 默认 8080,war 另加 Tomcat 端口。firewalld 环境(最小化安装先装包再启用):
dnf install -y firewalld
systemctl enable --now firewalld
firewall-cmd --state
回显(实测):
running
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
firewall-cmd --list-ports
回显(实测):
success
success
8080/tcp
list-ports 列出 8080/tcp 即放行成功;无 firewalld 的机器(如云厂商安全组托管)跳过本节,在控制台放行即可。
九、卸载与清理
完整卸载 standalone 与 war 两方案的全部产物:
systemctl stop axis2
systemctl disable axis2
rm -f /etc/systemd/system/axis2.service
systemctl daemon-reload
/opt/tomcat10/bin/shutdown.sh
rm -rf /opt/axis2 /opt/tomcat10 /opt/axis2-repo /opt/software/axis2-2.0.1* /opt/software/apache-tomcat-10.1.61.tar.gz
回显(实测):
Removed "/etc/systemd/system/multi-user.target.wants/axis2.service".
验证清理结果:
jps | grep SimpleAxis2Server; ls /opt/axis2 2>&1
回显(实测):
ls: cannot access '/opt/axis2': No such file or directory
jps 无输出(进程已停)、目录不存在即卸载干净。如需把系统 java 恢复为 1.8:alternatives --set java java-1.8.0-openjdk.x86_64。
十、参考链接
- Apache Axis2 官网:https://axis.apache.org/axis2/java/core/
- 官方下载目录(版本与校验文件):https://dlcdn.apache.org/axis/axis2/java/core/
- 二进制发行包安装说明:https://axis.apache.org/axis2/java/core/installationguide.html
- Axis2 配置参考:https://axis.apache.org/axis2/java/core/docs/axis2config.html
- Tomcat 10.1 下载:https://dlcdn.apache.org/tomcat/tomcat-10/