WildFly 17服务器提供的Maven依赖及pom.xml provided配置咨询
provided的依赖 我刚用WildFly的时候也碰到过这个问题,确实官方文档在这一块的指引不够直接,不过有几个实用的方法可以帮你搞定:
1. 引入WildFly官方BOM(最省心的方式)
WildFly提供了自己的Maven BOM(物料清单),它已经帮你管理好了所有服务器自带依赖的版本,你只需要在pom.xml的dependencyManagement中导入这个BOM,之后添加依赖时就不用手动指定版本,直接设为provided即可。
比如导入Java EE 7版本的BOM(WildFly 17对应Java EE 7):
<dependencyManagement> <dependencies> <dependency> <groupId>org.wildfly.bom</groupId> <artifactId>wildfly-javaee7-with-tools</artifactId> <version>17.0.1.Final</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
之后,像Servlet API、JSP API这类服务器提供的依赖,就可以这么写:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency>
BOM会自动帮你匹配WildFly 17中对应的版本,避免版本冲突。
2. 直接查看WildFly的modules目录
WildFly所有自带的依赖都放在$WILDFLY_HOME/modules/system/layers/base目录下,每个模块都有自己的module.xml文件,里面记录了该依赖的坐标和版本。
举个例子:
- 进入
$WILDFLY_HOME/modules/system/layers/base/javax/servlet/api/main - 打开
module.xml,你会看到类似这样的内容:
<resources> <resource-root path="javax.servlet-api-3.1.0.jar"/> </resources>
这就对应Maven依赖的groupId:javax.servlet、artifactId:javax.servlet-api、version:3.1.0,直接把这个依赖设为provided即可。
你可以根据自己项目用到的技术(比如JPA、EJB、JSF等),找到对应的模块目录,提取依赖信息。
3. 使用Maven依赖分析工具辅助检测
如果你已经添加了一些依赖,可以用Maven的dependency:analyze命令来帮你排查哪些依赖已经由WildFly提供,不需要打包到WAR/JAR中。
在项目根目录执行:
mvn dependency:analyze
执行完成后,控制台会输出类似Used undeclared dependencies和Unused declared dependencies的提示,结合WildFly提供的模块信息,你可以把那些服务器已经自带的依赖标记为provided。
补充说明
你示例中的javaee-web-api:7.0设为provided是完全正确的,因为WildFly 17完整支持Java EE 7规范,这个API包涵盖了Web层所需的大部分核心API。如果你的项目只用到Web层功能,这个依赖足够覆盖大部分场景;如果需要更细粒度的控制(比如单独引入EJB或JPA的API),再用前面的方法单独添加对应依赖即可。
内容的提问来源于stack exchange,提问作者magran x

