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

时间:2019-07-18 15:51:39

标签: java java-module

我正在将Java Swing应用程序从Java 8迁移到Java 10,而我没有Java Swing应用程序的源。

我首先遇到:

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

我成功解决了哪一个。如many posts on SO和其他站点中所述,自Java 9起,模块已从JDK中移出。这意味着我必须将依赖关系重新带回类路径中才能运行该应用程序。

现在我得到:

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

但是我似乎找不到这种依赖关系在哪里。我发现有一个post建议更改代码,但这对我来说不是一个选择。我还能尝试什么?

1 个答案:

答案 0 :(得分:1)

sun包类始终被视为内部JDK实现细节,而不应在应用程序代码中使用。现在Project Jigsaw已将JDK模块化,该类不再可用,这是一件好事。这不是什么新鲜事物,请参见Why Developers Should Not Write Programs That Call 'sun' Packages

  

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

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