【问题标题】:java.lang.NoSuchMethodException: jdk.internal.module.ModuleReferenceImpl.descriptor()java.lang.NoSuchMethodException: jdk.internal.module.ModuleReferenceImpl.descriptor()
【发布时间】:2019-01-17 05:56:23
【问题描述】:

在我的intellij IDE 中执行mvn clean intall 时出现java.lang.NoSuchMethodException: jdk.internal.module.ModuleReferenceImpl.descriptor() 错误。

当我将我的jdk-11.0.2 降级为jdk1.8.0_191 时,它就开始发生了。

这是完整的堆栈跟踪:

   java.lang.NoSuchMethodException: jdk.internal.module.ModuleReferenceImpl.descriptor()
    at java.base/java.lang.Class.getDeclaredMethod(Class.java:2476)
    at org.apache.maven.plugins.dependency.utils.DependencyStatusSets.getModuleDescriptor(DependencyStatusSets.java:272)
    at org.apache.maven.plugins.dependency.utils.DependencyStatusSets.buildArtifactListOutput(DependencyStatusSets.java:227)
    at org.apache.maven.plugins.dependency.utils.DependencyStatusSets.getOutput(DependencyStatusSets.java:165)
    at org.apache.maven.plugins.dependency.resolvers.ResolveDependenciesMojo.doExecute(ResolveDependenciesMojo.java:90)
    at org.apache.maven.plugins.dependency.AbstractDependencyMojo.execute(AbstractDependencyMojo.java:143)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:956)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:192)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

还有我的mvn version 详细信息在这里:

Admins-MacBook-Pro:carot jangbahadurpatel$ mvn --version
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T00:11:47+05:30)
Maven home: /usr/local/Cellar/maven/3.6.0/libexec
Java version: 11.0.2, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home
Default locale: en_GB, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.1", arch: "x86_64", family: "mac"

如何解决?

【问题讨论】:

  • 请分享确切的mvn -version 以及失败的阶段。此外,您的 Maven 配置将有助于在这里重现这一点。
  • @nullpointer 我已经用 mvn 版本更新了我的问题。
  • 当您尝试使用 Java-8 编译代码时,您的 maven 似乎配置了 Java11。我相信pom.xml 中的配置细节可以澄清。
  • 我的 pom.xml 中看不到 java 相关的配置。都是jersey、spring-web等依赖,不是java或者jdk相关的配置。
  • 不准确,您可以配置您的mavenrc 为您使用JDK8,或者确保您的maven 配置中存在正确的toolchains.xmlmaven.apache.org/guides/mini/guide-using-toolchains.html

标签: java intellij-idea java-8 java-11


【解决方案1】:

当我将jdk-11.0.2 降级为 jdk1.8.0_191.

这个 + java.lang.NoSuchMethodException 实际上很可疑。 ModuleReferenceImpl 类是ModuleReferencewhich was available since Java 9 的扩展类。

【讨论】:

  • 但奇怪的是maven在实现类上使用getDeclaredMethod,来访问接口定义的方法。看起来很像调用者知道该版本中不存在该接口,而 ModuleReferenceImpl 类显然存在,因为 JRE 只抱怨该类中不存在该方法。
猜你喜欢
  • 2013-03-12
  • 2013-11-23
  • 2015-02-25
  • 1970-01-01
  • 2013-08-04
  • 2020-10-21
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多