0

0

如何根据 JDK 版本条件化排除或引入 Maven 依赖

心靈之曲

心靈之曲

发布时间:2026-01-25 21:32:01

|

690人浏览过

|

来源于php中文网

原创

如何根据 JDK 版本条件化排除或引入 Maven 依赖

本文介绍在多 jdk 版本兼容构建场景下,如何通过 maven profile 实现对 `jakarta.xml.bind-api` 等模块化 api 依赖的精准控制:jdk 8 构建时完全排除,jdk 11+ 构建时按需显式引入。

在 Java 9 引入模块系统后,javax.xml.bind(及其后续 Jakarta 命名空间迁移版本)等 API 被从 JDK 中移除。因此,JDK 11+ 项目需显式声明 jakarta.xml.bind-api 和运行时实现(如 jaxb-runtime),而 JDK 8 项目则不应包含该依赖——否则可能引发类冲突、重复包加载或 JEE 容器部署失败(如 WebLogic/Tomcat 在 JDK 8 下因 jakarta.* 类与内置 javax.* 绑定机制不兼容而报错)。

Maven 本身不支持“按当前编译 JDK 版本动态排除传递依赖”,maven-compiler-plugin 的 配置项并非用于依赖过滤,而是针对编译器插件自身的资源处理逻辑,无法影响依赖解析阶段(Dependency Resolution)。正确解法是采用 “全局排除 + 条件化重引入” 策略:

✅ 步骤一:全局排除 jakarta.xml.bind-api

或直接在 中,使用 显式切断所有来源的该依赖(包括 cxf-core 等传递路径):

VIVA
VIVA

一个免费的AI创意视觉设计平台

下载
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-core</artifactId>
  <version>3.5.3</version>
  <exclusions>
    <exclusion>
      <groupId>jakarta.xml.bind</groupId>
      <artifactId>jakarta.xml.bind-api</artifactId>
    </exclusion>
  </exclusions>
</dependency>
⚠️ 注意:若多个依赖引入该 API,需对每个源头逐一排除;也可在 中统一声明 provided 或 true,但最稳妥方式仍是显式 exclusion。

✅ 步骤二:通过 JDK 激活 Profile 有条件引入

在 pom.xml 根节点下定义 Profile,仅当检测到 JDK ≥ 11 时激活,并声明所需依赖:

<profiles>
  <profile>
    <id>jdk11-plus</id>
    <activation>
      <jdk>[11,)</jdk> <!-- 表示 JDK 11 及以上版本 -->
    </activation>
    <dependencies>
      <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>4.0.0</version>
      </dependency>
      <!-- 可选:添加运行时实现(如 GlassFish JAXB) -->
      <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>4.0.3</version>
      </dependency>
    </dependencies>
  </profile>
</profiles>

Maven 会自动根据当前 JAVA_HOME 所指向的 JDK 主版本号匹配 [11,) 范围。JDK 8 构建时该 Profile 不激活,依赖不会加入 classpath;JDK 11/17/21 构建时自动启用,确保 API 可用。

✅ 验证与最佳实践

  • 使用 mvn help:active-profiles 确认 Profile 是否按预期激活;
  • 执行 mvn dependency:tree -Dverbose 检查 jakarta.xml.bind-api 是否彻底消失(JDK 8)或仅出现在 jdk11-plus 分支中(JDK 11+);
  • 若项目还需支持 JDK 17+ 的强封装(如 --add-opens),建议配合 maven-surefire-plugin 配置 JVM 参数;
  • 避免使用 jdk8 等非标准字段——Maven 无此语义,属常见误解。

该方案简洁、可移植、符合 Maven 生命周期设计原则,是跨 JDK 版本构建企业级 Java 项目的推荐实践。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
如何配置Tomcat环境变量
如何配置Tomcat环境变量

配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

117

2023.10.26

idea如何集成Tomcat
idea如何集成Tomcat

idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

173

2024.02.23

怎么查看Tomcat源代码
怎么查看Tomcat源代码

查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

98

2024.02.23

常见的tomcat漏洞有哪些
常见的tomcat漏洞有哪些

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

170

2024.02.23

tomcat日志乱码怎么解决
tomcat日志乱码怎么解决

tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

158

2024.02.23

weblogic和tomcat有哪些区别
weblogic和tomcat有哪些区别

weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

200

2024.02.23

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

244

2024.02.23

tomcat启动闪退怎么解决
tomcat启动闪退怎么解决

tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

169

2024.02.23

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.1万人学习

Java 教程
Java 教程

共578课时 | 80.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号