javax.mail和javax.mail-api的区别

11

javax.mailjavax.mail-api有什么区别?

我在Maven仓库找到了它们。

每个应该在什么时候使用?

软件包附带了javax.mail-api,但我无法使其工作,所以我下载了javax.mail

3个回答

10

javax.mail-api仅包含接口,而javax.mail包含实现。


1
我在我的应用程序中需要两者吗? - Jess
1
是的,你需要两者。例如,如果我们的应用程序由Maven管理,那么很容易实现。 - Sergey Morozov
1
我刚刚使用了邮件API。但是有一个不同groupid的类似api没有解决问题,所以我使用了下面的依赖项,现在它能够解决依赖关系了。 <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.0</version> <!-- <scope>test</scope> --> </dependency> - Jess
com.sun.mail:javax.mail 包含 javax.mail:javax.mail-api 中的类,因此您只需要前者。 对于可能有用的拆分案例,请参见 https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/2.19.0。在这里,javax:javax.mail-api 被声明为“provided”,而 com.sun.mail:javax.mail 为“runtime(可选)”。这意味着 log4j 是针对 javax.mail-api 进行编译的,但是任何需要日志设置中的邮件功能(即 SmptAppender)的人都需要在类路径中包含 com.sun.mail:javax.mail。 - Karsten Spang
1
顺便提一下,最近版本中已经将“javax”一词替换为“jakarta”,因此它们现在分别是com.sun.mail:jakarta.mail和jakarta.mail:jakarta.mail-api。这是因为现在只能在官方Java代码中使用“javax”。 - Karsten Spang

4
当像Java Mail API这样的库没有被作者发布到Maven Central或其他公共存储库时,可能会由不同方上传它们,并使用冲突的groupId进行发布。你看到的这两个库可能就是如此。
这个artifact似乎包含了最新版本的所有邮件API所需内容。

0

从我的经验和查看maven central来看,AFAIK...

javax.mail:mail捆绑在“war”中并且也在tomcat的“lib”中时,就会出现此错误:

java.lang.ClassCastException: javax.mail.Session cannot be cast to javax.mail.Session

同样地,javax.mail:javax-mail-api 包含一个 Session 类,并且不仅仅是接口。当它缺失时,会出现以下错误:

java.lang.NoClassDefFoundError: javax/mail/Authenticator

com.sun.mail:javax-mail 是一些 sun/oracle 特定的东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接