访问限制:类型 'BASE64Decoder' 不是 API

Access restriction: The type 'BASE64Decoder' is not API

我正在尝试将旧项目转换为 Maven 项目。但是当项目是 maven 时,它会在 class 上显示警告 with import:

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

Access restriction: The type 'BASE64Decoder' is not API (restriction on required library 'C:\Program Files\Java\jre7\lib\rt.jar')

那么它有什么问题呢?

所有 sun.* 和 com.sun.* 包对 Java 实现是私有的。 Java 的任何未来版本都可能会改变它们,可能会破坏依赖它们的应用程序代码。

相比之下,java.*、javax.* 和 javafx.* 中的所有 类 包都是一成不变的。他们的名字和他们的 public 成员不会改变,也不会被删除(理论上,已弃用的除外)。

这就是为什么您会收到一条消息,指出 类 不属于 public API。它们不适合 public 消费。

从 Java 8 开始,您应该改用 java.util.Base64 instead. However, it looks like you’re using Java 7, so you’ll want to use DatatypeConverter.parseBase64Binary and DatatypeConverter.printBase64Binary

另外需要说明的是,预计2017年7月发布的Java9将不允许程序访问sun.*类。参见 https://mreinhold.org/blog/jigsaw-module-system

您可以将 sun.misc.BASE64Encoder & sun.misc.BASE64Decoder 替换为其他 BASE64 class 例如Apache commons 或使用:

java.util.Base64;
Base64.getDecoder().decode(...);
Base64.getEncoder().encodeToString(...);