1

I have a project that I can run correctly from within Eclipse, but running the standalone jar gives me the java.lang.NoSuchMethodError for a class at runtime.

I unpacked the jar file and can see the class file in one library file in jar and I do see the method defined in the class. The exception is not about class not found, but just can't find the method in the class.

Could not find any helpful information on the internet for how to solve it.

2
  • @Ravi that does not help. In my issue, I do see the class file with the method defined in the package. Commented Jan 12, 2018 at 21:13
  • please read this meta.stackexchange.com/a/5235 Commented Jan 13, 2018 at 19:22

2 Answers 2

8

It is much likely that there is another jar in the dependencies that has the same class(may be another version for the same library) but don't have this method. I think that this latter class is the one loaded instead of the one you unpacked.

Sign up to request clarification or add additional context in comments.

4 Comments

I expanded all the jars within that executable jar. I found two class files for the class. decompile them and both of them have the same method defined.
Are you sure the two methods has the same signature?
Try to take out one class at a time from the executable jar, just to validate the analysis.
Yes, both of them have the same signature. I also tried to remove one of the class and keep only one copy in the jar, but it does not solve the issue.
1

NoSuchMethodError occurs when

... application tries to call a specified method of a class (either static or instance), and that class no longer has a definition of that method. Normally, this error is caught by the compiler; this error can only occur at run time if the definition of a class has incompatibly changed

As highlighted, there are two possibilities :

  1. Either method definition doesn't exists
  2. If method definition exist, then they might have incompatible change i.e. you might be using different version of jar/class during runtime.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.