WildFly 9添加模块失败:加载引用WAR时出现模块未找到异常
嘿,我来帮你捋捋这个模块加载失败的问题,结合你给出的配置,咱们从几个关键方向逐一排查:
1. 先检查模块配置文件的完整性
你提供的module.xml内容被截断了,这很可能是个核心问题!完整的模块配置必须闭合所有标签,正确格式应该是这样:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="com.ticomgeo.crowbar"> <resources> <resource-root path="properties"/> <!-- 如果你的模块还包含JAR包,得在这里添加对应的resource-root,比如: <resource-root path="crowbar-core.jar"/> --> </resources> <!-- 要是这个模块依赖其他系统模块(比如JDK的API),别忘了加dependencies节点,比如: <dependencies> <module name="javax.api"/> </dependencies> --> </module>
另外,确认$JBOSS_HOME/modules/com/ticomgeo/crowbar/main目录下,properties文件夹确实存在,并且里面有你需要的配置文件——空文件夹可能导致模块加载异常。
2. 核对模块名称与目录结构的一致性
你的jboss-deployment-structure.xml里引用的模块名是com.ticomgeo.crowbar,和module.xml里的name属性完全匹配,这部分没问题,但要注意:
- 目录层级必须和模块名严格对应:
com.ticomgeo.crowbar对应com/ticomgeo/crowbar/main,这点你做对了,但要检查目录名有没有拼写错误(尤其是Linux系统下大小写敏感,别把Crowbar写成crowbar)。
3. 验证WildFly是否真的识别到了这个模块
咱们可以用WildFly的CLI工具来确认:
- 启动WildFly,打开命令行进入
$JBOSS_HOME/bin目录 - 执行
./jboss-cli.sh -c(Windows用jboss-cli.bat -c)连接到服务器 - 输入命令:
module list | grep com.ticomgeo.crowbar
如果能输出这个模块的信息,说明WildFly已经识别到它;如果没输出,那肯定是模块目录或配置有问题,回头再检查步骤1和2。
另外,也可以查看$JBOSS_HOME/standalone/log/server.log,搜索com.ticomgeo.crowbar,里面会有模块加载失败的具体原因(比如文件缺失、依赖找不到),这比模糊的“模块未找到”有用多了。
4. 检查部署配置文件的细节
你的jboss-deployment-structure.xml放在WEB-INF目录下是对的,但建议加上正确的命名空间,避免潜在的解析问题:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"> <deployment> <dependencies> <module name="com.ticomgeo.crowbar" /> </dependencies> </deployment> </jboss-deployment-structure>
WildFly 9对应的命名空间是urn:jboss:deployment-structure:1.2,加上它能让配置更规范。
5. 权限问题别忽略(针对Linux系统)
如果WildFly运行用户没有模块目录的读取权限,也会报模块未找到。可以执行下面的命令修复权限(假设运行用户是jboss,根据实际情况调整):
chown -R jboss:jboss $JBOSS_HOME/modules/com/ticomgeo/crowbar chmod -R 755 $JBOSS_HOME/modules/com/ticomgeo/crowbar
最后一招:清理缓存重启
WildFly会缓存模块和部署的信息,有时候修改配置后需要清理缓存才能生效:
- 停止WildFly服务
- 删除
$JBOSS_HOME/standalone/data/content和$JBOSS_HOME/standalone/tmp下的所有内容 - 重新启动WildFly,再部署你的WAR包试试
内容的提问来源于stack exchange,提问作者Jeff Gaer

