Java Openjdk编译错误NoClassDefFoundError

Java Openjdk编译错误NoClassDefFoundError,java,java-8,migration,noclassdeffounderror,openjdk-11,Java,Java 8,Migration,Noclassdeffounderror,Openjdk 11,我正在从java8迁移到openjdk11,在编译过程中遇到以下错误 java.lang.NoClassDefFoundError:jdk/internal/reflect/ConstructorAccessorImpl类ConstructorAccessorImpl仍然存在于java 11代码库中,但现在它被隐藏,无法被模块系统访问 您应该查看您的代码库,找出它的用途。如果它不在您的代码库中,它可能在您正在使用的库中。在后一种情况下,首先要检查库版本是否支持Java 9+。大多数情况下,您只需

我正在从java8迁移到openjdk11,在编译过程中遇到以下错误


java.lang.NoClassDefFoundError:jdk/internal/reflect/ConstructorAccessorImpl

ConstructorAccessorImpl
仍然存在于java 11代码库中,但现在它被隐藏,无法被模块系统访问


您应该查看您的代码库,找出它的用途。如果它不在您的代码库中,它可能在您正在使用的库中。在后一种情况下,首先要检查库版本是否支持Java 9+。

大多数情况下,您只需重新编译源代码即可。这意味着在执行过程中找不到您使用的类。通过从Java8迁移到Java11,类也可能被弃用,因此不再可用。@Melvin-我从Java8迁移到openjdk11,而不是Java11。我还重新编译了它,但它不起作用。OpenJDK11是Java 11。因此,如果它正在使用,那么我必须删除它?这是最好的解决方案。应用程序代码不应使用私有/内部JDK API。但是,如果使用来自第三方库,他们很可能有更新版本的库解决了问题。也可以“打开”模块,但这应该被视为短期解决方案,而不是长期解决方案。奇怪的是类
jdk.internal.reflect.ConstructorAccessorImpl
在jdk8中不存在。在JDK 8中,内部使用的类的名称为
sun.reflect.ConstructorAccessorImpl
。因此,在Java8中,这不可能是旧的代码库访问前者的问题。包更改似乎是在Java9中进行的。这就指向了第三方库,它在移植到Java9+方面走了一条捷径。