Active16 days ago
class PropHolder
is a class of my own. The class resides in the same JAR file of the main class. So that should not because any JAR is missing from classpath.When I look in to the JAR file by
jar tf myjarfile
, I can see the PropHolder.class
listed there.Btw: the code is running fine on my local machine. But couldn't work when I deploy it with some script onto a Linux server. So I think it is not the problem of the code.But for some reason. the deploy process is very hard to track.
What could be the problem?
Java.lang.NoClassDefFoundError: Could not initialize class com.sun.xml.internal.ws.fault.SOAPFaultBuilder.
Erik Allik26.6k99 gold badges8080 silver badges9292 bronze badges
LeonLeon3,0201010 gold badges3939 silver badges4747 bronze badges
9 Answers
My best bet is there is an issue here:
It would appear some uncaught exception occurred and propagated up to the actual ClassLoader attempting to load the class. We would need a stacktrace to confirm this though.
Either that or it occurred when creating
buræquetePropHolder.prop
static variable.9,07344 gold badges2727 silver badges5757 bronze badges
John VintJohn Vint35k66 gold badges6060 silver badges9494 bronze badges
You are getting a
java.lang.NoClassDefFoundError
which does NOT mean that your class is missing (in that case you'd get a java.lang.ClassNotFoundException
). The ClassLoader ran into an error while reading the class definition when trying to read the class.Put a try/catch inside your static initializer and look at the exception. If you read some files there and it differs from your local environment it's very likely the cause of the problem (maybe file can't be found, no permissions etc.).
jehajeha8,86355 gold badges4141 silver badges6363 bronze badges
NoClassDefFoundError doesn't give much of a clue as to what went wrong inside the static block. It is good practice to always have a block like this inside of static { ... } initialization code:
Mark HansenMark Hansen
I had the same exception, this is how I solved the problem:
Preconditions:
- Junit class (and test), that extended another class.
- ApplicationContext initialized using spring, that init the project.
- The Application context was initialized in @Before method
Solution:
Init the application context from @BeforeClass method, since the parent class also required some classes that were initialized from within the application context.
Hope this will help.
Vikdor
21.2k99 gold badges5050 silver badges7575 bronze badges
KerenSiKerenSi
As mentioned above, this could be a number of things. In my case I had a statically initialized variable which relied on a missing entry in my properties file. Added the missing entry to the properties file and the problem was solved.
TriMixTriMix
I had the same exception - but only while running in debug mode, this is how I solved the problem (after 3 whole days):in the build.gradle i had : 'multiDexEnabled true' set in the defaultConfig section.
but apparently this wasn't enough.but when i changed:
to:
this solved it.hope this will help someone
EladElad
Just several days ago, I met the same question just like yours. All code runs well on my local machine, but turns out error(noclassdeffound&initialize). So I post my solution, but I don't know why, I merely advance a possibility. I hope someone know will explain this.@John VintFirstly, I'll show you my problem. My code has static variable and static block both. When I first met this problem, I tried John Vint's solution, and tried to catch the exception. However, I caught nothing. So I thought it is because the static variable(but now I know they are the same thing) and still found nothing.So, I try to find the difference between the linux machine and my computer. Then I found that this problem happens only when several threads run in one process(By the way, the linux machine has double cores and double processes). That means if there are two tasks(both uses the code which has static block or variables) run in the same process, it goes wrong, but if they run in different processes, both of them are ok.In the Linux machine, I use
to run a task, and because my static variable is to start a container(or maybe you initialize a new classloader), so it will stay until the jvm stop, and the jvm stops only when all the tasks in one process stop. Every task will start a new container(or classloader) and it makes the jvm confused. As a result, the error happens.So, how to solve it? My solution is to add a new command to the maven command, and make every task go to the same container.
Maybe you have already solved this problem, but still hope it will help others who meet the same problem.
MonkeyKingMonkeyKing
If you're working on an Android project, make sure you aren't calling any static methods on any Android classes. I'm only using JUnit + Mockito, so maybe some other frameworks might help you avoid the problem altogether, I'm not sure.
My problem was calling
Uri.parse(uriString)
as part of a static initializer for a unit test. The Uri class is an Android API, which is why the unit test build couldn't find it. I changed this value to null
instead and everything went back to normal.lifeson106lifeson106
I had the same problems:java.lang.NoClassDefFoundError: Could not initialize class com.xxx.HttpUtils
it is the environment problem.That means the properties in application.yml is incorrect or empty!
user8503957user8503957