【问题标题】:Difference between sun.* vs com.sun.*sun.* 与 com.sun.* 之间的区别
【发布时间】:2019-04-22 18:12:30
【问题描述】:

我最近从 Java 8 迁移到 Java 11。 为jax.ws

我必须将以下外部依赖项添加到我的pom.xml,因为它在 Java 11 中不再可用。但是,我遇到了一些论点,即不应使用 com.sun.* 包类,并且应尽可能避免使用。那么是sun.* 还是com.sun.*?如果后者也是如此,那么最好的替代品是什么?

还有一点,我的代码没有直接使用此依赖项,而是由我的其他依赖项之一引用。

    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.2.10</version>
    </dependency>

【问题讨论】:

  • sun.* 软件包注释”仅明确适用于 sun.*com.sun.* 中的许多类被明确记录为 API 的一部分,例如 JNDI 提供程序、HTTP 服务器,以及过去的 JSSE。不幸的是,一些 IDE 作者似乎没有意识到这一点,并导致他们的产品发出错误的警告。
  • 然而,并不是所有的 com.sun.* 包都暴露了。其中许多(如 com.sun.jmx.*)纯粹是内部的,不应使用。在 java 11 中,事情比以前清晰得多,因为这些内部 API 现在已被模块系统封装。如果 com.sun.* 包是可以使用的公共 API,它将被定义它的模块无条件地导出。

标签: java dependencies java-9 java-11


【解决方案1】:

一些com.sun.* 类是实际的外部API,可以使用。关键是检查官方的 Javadoc,看看你想使用的类是否被列为 API,而不是标记为 @Deprecated 或类似的东西。

这里是官方的 javadoc 页面,可以查看: https://docs.oracle.com/en/java/javase/11/docs/api/index.html

一般来说,sun.* API 指的是一些最古老的 Java API(例如 sun.misc.Unsafe),它们早于反向 DNS 包命名约定。大多数原始sun.* API 要么已被删除,要么被提升为官方javax.* API,要么被重命名为更合适的com.sun.* 域。

使用com.sun.* API 本质上没有任何问题,前提是该 API 不是 JDK 内部的或标记为弃用/删除的。

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 2019-04-09
    • 2014-10-30
    • 2021-12-07
    • 2016-02-09
    • 2016-05-14
    • 2016-10-11
    • 2015-06-02
    • 2018-04-08
    相关资源
    最近更新 更多