JBoss EAP 7.4.x依赖管理:Java8转Java11迁移中的依赖选择
Java 11 + JBoss EAP 7.4 迁移依赖配置指南
核心选型原则
- 优先使用JBoss EAP官方定制的依赖版本(比如
2.3.1.redhat-00002),并添加<scope>provided</scope>,彻底规避版本冲突 - Java 11已移除JAXB这类EE模块,必须显式引入API和实现,但版本必须和JBoss EAP 7.4内置组件对齐
最优POM配置方案
第一步:引入JBoss EAP 7.4 BOM(推荐)
通过BOM统一管理所有服务器内置组件的版本,无需手动逐个指定版本,避免出错:
<dependencyManagement> <dependencies> <dependency> <groupId>com.redhat.jboss.eap</groupId> <artifactId>jboss-eap-parent</artifactId> <version>7.4.0.GA</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
第二步:配置JAXB依赖
引入BOM后,直接简写依赖即可,版本会自动与服务器对齐:
<!-- JAXB API - 由JBoss EAP提供,标记为provided避免打包冲突 --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>javax.xml.bind-api</artifactId> <scope>provided</scope> </dependency> <!-- JAXB实现 - 服务器已内置,标记为provided --> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <scope>provided</scope> </dependency> <!-- 可选:本地编译/测试时若需要运行时依赖,可添加(同样用provided) --> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <scope>provided</scope> </dependency>
如果不想用BOM,也可以手动指定JBoss定制版本:
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>javax.xml.bind-api</artifactId> <version>2.3.1.redhat-00002</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.1.redhat-00002</version> <scope>provided</scope> </dependency>
第三步:配置Java 11编译环境
确保Maven编译插件指定Java 11版本:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> <release>11</release> </configuration> </plugin>
避坑提醒
- 绝对不要混用
jakarta.xml.bind和javax.xml.bind依赖:JBoss EAP 7.4基于Jakarta EE 8,依然使用javax.*命名空间,使用jakarta.*会直接导致类加载冲突 - 所有服务器内置的组件都要加
provided,避免打包时将服务器已有的jar包打进war/ear,引发版本冲突 - 若项目有其他第三方依赖,也要检查是否和JBoss内置版本兼容,优先选择与BOM版本匹配的构件
内容的提问来源于stack exchange,提问作者Pablo Escobarl
相关产品推荐
相关产品推荐

