CentOS 8 安装 Apache Axis2 指南

在 CentOS 8 从零安装 Apache Axis2 2.0.1:vault 源与 JDK 17 切换、官方二进制包 standalone 部署、Tomcat 10.1 war 部署、堆限制、systemd 托管与卸载,全程实测。

Apache Axis2Axis22026/10/13

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.x2.0.0 / 2.0.1axis2-<ver>-bin.zip、axis2-<ver>-war.zipJava 17+(类文件 61.0,JDK 8 实测报错)当前最新主线,jakarta.servlet
1.8.x1.8.0 / 1.8.2axis2-<ver>-bin.zipJava 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.12.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.xmlroot level 默认 INFO,改 DEBUG 会输出大量日志
JAVA_HOMEsystemd 单元 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。

十、参考链接