要查看JBoss应用服务器版本,最直接的办法是执行./jboss-cli.sh -c --command=:version,或在启动日志里找JBoss EAP 7.4.0.GA (WildFly 23.0)那一行;如果无法访问控制台,还可以查看$JBOSS_HOME下的MANIFEST.MF文件。 版本号直接影响补丁选择和安全配置,所以弄清楚“到底跑的是哪一版”值得花两分钟验证。
jboss版本查看命令有哪些
线上环境通常不能随便停服务,所以下面这几类方法都是只读的,不干预运行进程,无论你是运维还是开发者,先定位JBOSS_HOME,再选用对应手段。
通过Linux命令行快速确认jboss版本
在Linux服务器上,最稳妥的流程是:先找到进程,再查版本。
- 执行
ps -ef | grep java | grep jboss,从启动参数中拿到-Djboss.home.dir对应的路径,那就是JBOSS_HOME。 - 进入
$JBOSS_HOME/bin,执行./jboss-cli.sh -c --command=:version,该命令会连接本地管理端口,返回类似JBoss Admin CLI (EAP 7.4)的输出。 - 如果管理端口未开启,CLI会提示连接失败,这时改用日志法:执行
grep -i "jboss" $JBOSS_HOME/standalone/log/server.log | head -20,在启动日志前几行能看到完整产品名和版本号。 - 还有一种老办法:查看
$JBOSS_HOME/bin/product.conf,文件里通常只有一行JBOSS_PRODUCT=wildfly或JBOSS_PRODUCT=eap,它只说明产品系列,不包含具体的GA版本号。 - 需要精确版本时,直接查看
$JBOSS_HOME/modules/system/layers/base/org/jboss/as/product/eap/dir/META-INF/MANIFEST.MF,这个文件里有Implementation-Version字段,例如4.0.GA。
如果连CLI都没有配置,推荐用命令组合一次性拿到关键信息:
ls -l $JBOSS_HOME/modules/system/layers/base/org/jboss/as/product/ cat $JBOSS_HOME/modules/system/layers/base/org/jboss/as/product/eap/dir/META-INF/MANIFEST.MF
第一行列出产品目录名,第二行读出精确版本号,这套组合在绝大多数JBoss EAP和WildFly部署上都有效。
通过CLI工具与启动日志获取运行版本
已经运行中的实例,版本信息最可靠的来源是启动日志,因为文件系统里的安装包可能被覆盖或升级,但日志里会如实记录每次启动时加载的实际版本。
- 执行
,搜索类似tail -n 200 $JBOSS_HOME/standalone/log/server.log
JBMADMIN或org.jboss.as开头的行,通常会看到JBoss EAP 7.4.0.GA (WildFly Core 15.0.1.Final)。 - 如果同一台机器上部署了多个实例,每个实例的
JBoss Home和server.base.dir不同,先用ps -ef | grep java确认每个进程名,再进入各自目录查日志。 - CLI方式更省事:运行
$JBOSS_HOME/bin/jboss-cli.sh -c --command=:version,它能输出当前管理进程的产品版本,通常和服务器版本保持一致,域模式下,执行/host=master:whoami或/host=master:release-info也能看到版本信息。 - 对于老版本JBoss AS,没有CLI时,可以直接在启动日志中搜索
AS和Version关键字,比如JBoss [MSC] service ... started with version 7.1.1.Final。
通过MANIFEST.MF查找精确版本号
很多人问“jboss应用服务器版本号在哪看”,其实答案就藏在MANIFEST.MF文件里,这个文件是Java加载模块时读取的元数据,版本信息最直接。
- 打开
$JBOSS_HOME/modules/system/layers/base/org/jboss/as/product/eap/dir/META-INF/MANIFEST.MF,通常会看到:JBoss-Product-Release-Name: JBoss EAPJBoss-Product-Release-Version: 7.4.0.GA
- 对于WildFly社区版,把路径中的
eap换成wildfly,同样能读到WildFly 23.0.2.Final这样的版本。 - 如果是老版本JBoss AS 4/5/6,路径位置不同,一般在
$JBOSS_HOME/server/default/deploy/jbossweb.sar/META-INF/MANIFEST.MF里。
文件系统版本和运行版本可能不一致,所以读MANIFEST时,最好再对照启动日志确认一次。
jboss和wildfly版本对应关系怎么区分
JBoss的发展历史有点绕:社区版从JBoss AS改名成WildFly,企业版叫做Red Hat JBoss EAP,名字不同,版本号也不是同一套序列,理解对应关系能避免判断错误。
从目录名和产品标识识别版本家族
- 老JBoss AS(4.x/5.x/6.x)的目录结构自带
server/default,部署war包时放在deploy目录下。 - JBoss EAP 6开始引入
modules和standalone、domain目录,结构上接近EAP 7,但product.conf中可能标识为eap。 - WildFly社区版解压目录通常叫
,但生产环境里很多人会改名,所以不能只看目录名。wildfly-23.0.2.Final
- 最稳妥的是读取产品目录名,比如
modules/system/layers/base/org/jboss/as/product/下的文件夹叫eap还是wildfly。
版本号规则与常见命名差异
| 家族 | 典型版本号 | 目录特征 | 适用场景 |
|---|---|---|---|
| JBoss AS | 2.3.GA、5.1.0.GA、6.1.0.Final | 有服务端子目录 | 老项目遗留 |
| JBoss EAP 6 | 1.0.GA、6.4.0.GA | 基于AS7,有modules | 企业官方支持 |
| WildFly | 0.0.Final、10.1.0.Final、23.0.2.Final | 社区版,更新快 | 开发/测试环境 |
| JBoss EAP 7 | 0.0.GA、7.1.0.GA、7.4.0.GA | product.conf标记为eap | 企业生产环境 |
行业共识是:EAP 7.x基于WildFly 10及后续版本基线,但两者版本号不是线性对应,比如EAP 7.4基于WildFly 23,而EAP 7.0基于WildFly 10,如果看到WildFly 12,不要直接推断它对应EAP 7.2,应该以官网公开的兼容性矩阵为准。
版本号命名逻辑
- GA/Final/Release都表示正式发布版。
- CR是候选版。
- CP是累积补丁包,打补丁后MANIFEST里会多出CP标识。
- 查看已安装的补丁级别,可以执行
$JBOSS_HOME/bin/jboss-cli.sh -c --command=:product-info,输出中会列出当前版本和补丁版本。
查看jboss版本号的常见坑与排查思路
版本查看本身不难,但实际排查中总有几个地方容易栽跟头。
运行版本和安装包版本不一致
很多人把目录名当作版本号直接写在工单里,结果做漏洞排查时对不上,原因通常是:运维人员解压EAP压缩包后为了带环境标识,把文件夹改成了appserver-jboss,或者安装脚本中途执行了补丁更新,这时候目录名完全没有参考价值,必须以运行日志和CLI回显为准。
多实例环境下用端口区分版本
一台机器同时跑两个JBoss实例时,ps -ef | grep java会输出多个进程,每个实例的server.base.dir参数指向不同的目录,版本可能不同,先用netstat -tlnp确认端口,再用lsof -i:8080
找到对应PID,回到该PID的启动参数中找-Djboss.server.base.dir,最后去对应目录查日志,这样不会串版本。
线上环境版本确认的推荐流程
- 先执行
ps -ef | grep java | grep jboss拿进程信息。 - 再执行
ls -l /proc/<pid>/cwd确认工作目录。 - 使用
readlink -f解析JBOSS_HOME的软链接。 - 查看
standalone/log/server.log开头部分。 - 执行CLI的
version做最后确认。 - 如果版本信息还不足以判断,再看
MANIFEST.MF里的产品标识。
业内专家提醒:遇到目录名里带-SNAPSHOT或自定义版本号的情况,不要盲目相信Maven发布记录,服务器上实际运行的是什么版本,只认命令输出。
关于jboss版本查看的常见问题
Q1:线上运行中的jboss版本怎么看?
如果CLI可用,直接执行./jboss-cli.sh -c --command=:version,如果管理端口不可达,查看$JBOSS_HOME/standalone/log/server.log的前几十行,找到JBoss EAP或WildFly产品名和版本号,如果日志被清空,查看$JBOSS_HOME/modules/system/layers/base/org/jboss/as/product/eap/dir/META-INF/MANIFEST.MF中的JBoss-Product-Release-Version。
Q2:jboss目录名是jboss-as-7.1.1.Final,为什么实际版本显示7.2?
解压目录名通常是安装人员随意命名的,也可能安装后执行了补丁更新,目录名只代表初始安装包,不代表最终运行版本,应以启动日志中的started with version字样或CLI的version回显为准,如果两个文件都指向7.2,那就是安装补丁后的真实版本。
Q3:同机器跑多个jboss实例,怎么区分各自版本?
每个实例有独立的JBOSS_HOME和server.base.dir,先用ps -ef | grep java找到每个进程的-Djboss.server.base.dir参数,进入各自目录查看standalone/log/server.log,或在该目录下执行./bin/jboss-cli.sh -c --command=:version,不同实例的管理端口不同,CLI连接时需指定--controller=127.0.0.1:管理端口。
版本号不是装饰品,它决定了补丁、兼容性和安全策略,用CLI命令和MANIFEST文件交叉验证,就能从目录名的迷雾里找到真正在跑的版本。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/762303.html





