我得到一个NoSuchMethodError错误时运行我的Java程序。出了什么问题,我该怎么解决?


当前回答

我在使用Intelij的Gradle项目中遇到了类似的问题。 我通过删除.gradle(见下面的截图)包和重建项目来解决这个问题。 .gradle包

其他回答

我也犯了同样的错误:

  Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonGenerator.writeStartObject(Ljava/lang/Object;)V
        at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:151)
        at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:292)
        at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3681)
        at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3057)

为了解决这个问题,我检查了,首先,模块依赖关系图(在你的POM中单击组合-> Ctrl+Alt+Shift+U或右键单击你的POM -> Maven ->显示依赖关系),以了解库之间的冲突到底在哪里(Intelij IDEA)。在我的特殊情况下,我有不同版本的Jackson依赖项。

1)所以,我直接在我的项目POM中明确地添加了这两个的最高版本- 2.8.7。

属性:

<jackson.version>2.8.7</jackson.version>

作为依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version}</version>
</dependency>

2)但也可以使用依赖排除来解决。

同样的原理,如下例所示:

  <dependency>
      <groupId>group-a</groupId>
      <artifactId>artifact-a</artifactId>
      <version>1.0</version>
          <exclusions>
             <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
             </exclusion>
         </exclusions>
  </dependency>

不需要版本的依赖项将从项目中排除。

NoSuchMethodError:我花了几个小时来修复这个问题,最终通过重命名包名来修复它,清洁和构建…尝试清洁构建首先,如果它不工作尝试重命名类名或包名和清洁构建…它应该被修复。祝你好运。

我刚刚通过重新启动Eclipse并运行应用程序解决了这个错误。 我的情况可能是因为我在没有关闭项目或Eclipse的情况下替换了源文件。 这导致了我使用的不同版本的类。

我通过重命名一个Junit测试文件在Eclipse中解决了这个问题。 在我的Eclipse工作空间中,我有一个App项目和一个Test项目。 Test项目将App项目作为构建路径上的必需项目。

开始获取NoSuchMethodError。 然后我意识到Test项目中的类与App项目中的类具有相同的名称。

App/  
  src/
     com.example/  
       Projection.java
Test/  
  src/
     com.example/
       Projection.java

在将测试重命名为正确的名称“ProjectionTest.java”后,异常消失了。

在我的案例中,问题是在构建路径中有相同库的两个版本。这个库的旧版本没有这个功能,新版本有。