java.lang.NoClassDefFoundError: sun/net/www/protocol/https/D



我正在将一个没有源代码的Java Swing应用程序从Java 8移动到Java 10。

我第一次遇到:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/ws/WebServiceException

我成功解决了。正如SO和其他网站上的许多帖子所解释的那样,从Java 9开始,模块已经从JDK中移出。这意味着我必须将依赖项带回我的类路径才能运行应用程序。

现在我得到:

java.lang.NoClassDefFoundError: sun/net/www/protocol/https/DefaultHostnameVerifier

但我似乎找不到这种依赖性在哪里。我找到了一个建议更改代码的帖子,但这对我来说不是一个选择。我还能尝试什么?

sun包类始终意味着内部JDK实现细节,而不是在应用程序代码中使用。现在JDK被Jigsaw项目模块化了,这个类不再可用,这是一件好事。这不是什么新鲜事,请参阅为什么开发人员不应该编写调用"sun"包的程序:

sun.* 软件包不是受支持的公共接口的一部分。 直接调用 sun.* 包的 Java 程序不能保证在所有与 Java 兼容的平台上都能运行。实际上,即使在同一平台上的未来版本中,也不能保证这样的程序可以正常工作。

解决方案是更改应用程序代码以与 JDK 10 兼容。如果无法更改应用程序代码,则应保留在 JDK 8 上。

最新更新