Maven多模块项目如何正确下载使用Wildfly Jar包
问题根源
你的配置存在两个核心错误:
importscope的依赖只能放在<dependencyManagement>节点下,直接写在父POM的<dependencies>节点下不会生效,也无法实现依赖版本导入的效果。- 你导入的
org.wildfly:wildfly-parent是WildFly服务器项目自身构建用的父POM,不是给业务应用开发用的依赖BOM(物料清单),它本身不会帮你引入任何可用的应用开发依赖。
另外你存在一个认知误区:WildFly安装包modules目录下的包是服务器运行时自身使用的,和Maven的依赖解析逻辑完全无关,Maven不会因为你导入了WildFly相关的POM,就自动把这些包加入项目编译类路径。
正确配置步骤
1. 父POM导入官方BOM
在父POM的<dependencyManagement>节点下,导入WildFly官方为应用开发提供的Java EE 8 BOM,统一管理所有规范API、常用第三方包的版本,替换掉你之前错误的wildfly-parent导入配置:
<dependencyManagement> <dependencies> <dependency> <groupId>org.wildfly.bom</groupId> <artifactId>wildfly-ee8</artifactId> <version>21.0.2.Final</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2. 子模块按需声明依赖
BOM仅负责统一依赖版本,不会自动把依赖加入项目类路径,你在代码里用到什么包,就必须在对应子模块的<dependencies>节点下明确声明。所有WildFly运行时已经自带的包,scope必须设置为provided,避免打包时重复引入引发类加载冲突。
针对你报错的几个包,对应依赖配置参考如下:
<dependencies> <!-- 解决javax.servlet.http包不存在问题 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> <!-- 解决javax.xml.ws包不存在问题 --> <dependency> <groupId>javax.xml.ws</groupId> <artifactId>jaxws-api</artifactId> <scope>provided</scope> </dependency> <!-- 解决javax.mail、javax.mail.internet包不存在问题 --> <dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <scope>provided</scope> </dependency> <!-- 解决org.apache.commons.beanutils包不存在问题 --> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <scope>provided</scope> </dependency> </dependencies>
注意事项
- 不要在业务项目中直接继承或导入
wildfly-parent,这个POM的所有依赖、插件配置都是为WildFly服务器自身源码构建服务的,和业务应用的开发场景不匹配。 - 不要依赖本地安装的WildFly服务器内的包做编译,所有编译期依赖必须通过Maven中央仓库或你配置的私服下载,
providedscope的依赖仅在编译、测试阶段生效,打包时不会被加入最终产物,运行时会直接使用WildFly自带的对应包。 - 如果后续需要用到WildFly modules目录下的其他第三方包,先确认该包在BOM中已经管理了版本,声明时不需要写版本号直接加
providedscope即可;如果BOM中没有对应包,要么手动指定版本声明为providedscope,要么把对应依赖的JAR包作为公共模块部署到WildFly后再使用。
内容的提问来源于stack exchange,提问作者Dusayanta Prasad
相关产品推荐
相关产品推荐

