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


当前回答

我也犯了同样的错误:

  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>

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

其他回答

在没有更多信息的情况下,很难确定问题,但根本原因是您很可能针对缺少方法的类的不同版本编译了一个类,而不是您在运行时使用的类。

查看堆栈跟踪…如果在对库中的对象调用方法时出现异常,则很可能在编译和运行时使用了该库的不同版本。确保这两个地方都有正确的版本。

如果在对由您创建的类实例化的对象调用方法时出现异常,那么您的构建过程似乎是错误的。确保在编译时更新了实际运行的类文件。

如果使用Maven或其他框架,并且您几乎随机地得到这个错误,请尝试像这样干净地安装…

clean install

如果您编写了对象并且知道它有方法,那么这种方法尤其可能工作。

如果你在写一个webapp,确保你的容器的全局库目录和你的应用程序中没有冲突的jar版本。你可能不知道类加载器正在使用哪个jar。

如。

" /好/李勃200 mywebapp / WEB-INF /李勃

这些问题是由在相同的两个类中使用相同的对象引起的。 所使用的对象不包含已添加新对象类包含的新方法。

ex:

filenotnull=/DayMoreConfig.conf
16-07-2015 05:02:10:ussdgw-1: Open TCP/IP connection to SMSC: 10.149.96.66 at 2775
16-07-2015 05:02:10:ussdgw-1: Bind request: (bindreq: (pdu: 0 9 0 [1]) 900 900 GEN 52 (addrrang: 0 0 2000) ) 
Exception in thread "main" java.lang.NoSuchMethodError: gateway.smpp.PDUEventListener.<init>(Lgateway/smpp/USSDClient;)V
        at gateway.smpp.USSDClient.bind(USSDClient.java:139)
        at gateway.USSDGW.initSmppConnection(USSDGW.java:274)
        at gateway.USSDGW.<init>(USSDGW.java:184)
        at com.vinaphone.app.ttn.USSDDayMore.main(USSDDayMore.java:40)

-bash-3.00$ 

这些问题是由伴随的02相似类引起的(1在src, 1在jar文件这里是gateway.jar)

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