You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jakarta.mail-api与Angus实现时的重复类冲突问题

问题描述

应用使用以下Maven依赖:

<dependency>
    <groupId>jakarta.mail</groupId>
    <artifactId>jakarta.mail-api</artifactId>
    <version>2.1.2</version>
</dependency>
<dependency>
    <groupId>org.eclipse.angus</groupId>
    <artifactId>jakarta.mail</artifactId>
    <version>2.0.2</version>
</dependency>

构建配置中启用了maven-enforcer-plugin的BanDuplicateClasses规则禁止重复类。尽管Angus 2.0.2本身依赖jakarta.mail-api 2.1.2,但编译时仍抛出类冲突错误:

[ERROR] Rule 1: org.apache.maven.plugins.enforcer.BanDuplicateClasses failed with message:
Duplicate classes found:

  Found in:
    org.eclipse.angus:jakarta.mail:jar:2.0.2:compile
    jakarta.mail:jakarta.mail-api:jar:2.1.2:compile
  Duplicate classes:
    jakarta/mail/Session.class

调试输出显示,其他重复类因字节码完全一致被插件忽略,仅Session.class触发冲突。

原因分析
  1. Angus包的打包特性:org.eclipse.angus:jakarta.mail是Jakarta Mail的实现包,它内部包含了API中核心类(比如Session)的具体实现代码,并非仅依赖API包提供的类。即便它声明了对jakarta.mail-api的依赖,自身jar包内仍存在Session.class文件。
  2. 字节码版本差异:jakarta.mail-api 2.1.2中的Session.class与Angus 2.0.2中的Session.class字节码内容不一致——API包中的Session可能包含了2.1.2版本新增的方法或属性,而Angus 2.0.2作为对应2.0.x API的实现,其Session类并未同步这些改动,导致两者字节码无法匹配,被enforcer插件判定为冲突。而其他重复类(如基础接口类)在两个包中内容完全一致,因此被插件忽略。
  3. 依赖版本不匹配:Angus 2.0.2的设计目标是适配Jakarta Mail API 2.0.x版本,手动指定更高版本的API包(2.1.2)打破了实现与API的版本对应关系,这是引发类冲突的根本原因。

内容的提问来源于stack exchange,提问作者Sheldorious

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:35:12