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

java.lang.NoClassDefFoundError:sun/net/www/protocol/https/DefaultHostnameVerifier,java,java-module,Java,Java Module,我正在将一个Java Swing应用程序的源代码从Java8迁移到Java10 我第一次遇到: Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/ws/WebServiceException 我成功地解决了这个问题。正如在和其他站点中所解释的,从Java9开始,模块已经从JDK中移出。这意味着我必须将依赖项带回类路径中,应用才能运行 现在我得到: java.lang.NoClassDefFoundError

我正在将一个Java Swing应用程序的源代码从Java8迁移到Java10

我第一次遇到:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/ws/WebServiceException
我成功地解决了这个问题。正如在和其他站点中所解释的,从Java9开始,模块已经从JDK中移出。这意味着我必须将依赖项带回类路径中,应用才能运行

现在我得到:

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

但我似乎找不到这种依赖性在哪里。我找到了一个建议更改代码的方法,但这不是我的选择。我还可以尝试什么呢?

sun
包类始终作为内部JDK实现细节,不用于应用程序代码中。现在JDK已经被这个类模块化了,不再可用,这是一件好事。这不是什么新鲜事,请参见:

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


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

我担心我可能会听到这一点-其他帖子都倾向于这样。感谢您的确认。@DavidBrossard请检查试图加载此类的内容,如果是第三方库,您可以通过更新该库而逃脱处罚