java.lang.NoClassDefFoundError error when running my project
Solution 1
You can't mix JAX-RS
/ Jersey
versions
Jersey
version 1 is the reference implementation for JAX-RS 1.Jersey
version 1 uses thecom.sun.jersey
group / package prefix.Jersey
version 2 is the reference implementation for JAX-RS 2.Jersey
version 2 uses theorg.glassfish.jersey
group / package prefix
If you have both Jersey versions, or both JAX-RS versions on your classpath, you'll get lots of NoClassDefFoundError
, NoSuchMethodError
or similar.
If possible use JAX-RS
/ Jersey
version 2
Solution 2
For me this actually means I had somehow mixed things and was using
$ mvn dependency:list | grep jersey
[INFO] com.sun.jersey:jersey-client:jar:1.11:compile
[INFO] com.sun.jersey:jersey-core:jar:1.0.2:compile
(conflict within jersey 1.x)
user352951
Updated on June 05, 2022Comments
-
user352951 almost 2 years
I have been struggling to get this to work and I think i can use some help. I am working on a Java project where the pom.xml has a bunch of dependencies some of which are themselves indirectly dependent on this jar:
com.sun.jersey:jersey-core:1.17.1
like this:<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.0.1</version> </dependency>
And I need this particular jar in my pom because I want to use the new features in jax-rs api:
javax.ws.rs:javax.ws.rs-api:2.0
.The problem is when I build my project I get this error:Found duplicate classes in [com.sun.jersey:jersey-core:1.17.1,javax.ws.rs:javax.ws.rs-api:2.0] : [WARNING] javax.ws.rs.ApplicationPath [WARNING] javax.ws.rs.Consumes [WARNING] javax.ws.rs.CookieParam [WARNING] javax.ws.rs.DELETE [WARNING] javax.ws.rs.DefaultValue [WARNING] javax.ws.rs.Encoded [WARNING] javax.ws.rs.FormParam [WARNING] javax.ws.rs.GET [WARNING] javax.ws.rs.HEAD [WARNING] javax.ws.rs.HeaderParam ... ..
I tried to fix this by excluding
com.sun.jersey:jersey-core:1.17.1
from dependencies which were including it by checking the dependency tree.<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.0.1</version> <scope>test</scope> <exclusions> <exclusion> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> </exclusion> </exclusions> </dependency>
Now the project builds fine but when I try to run it I get this error:
java.lang.NoClassDefFoundError: com/sun/jersey/core/util/FeaturesAndProperties at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.7.0_51] at java.lang.Class.privateGetDeclaredMethods(Class.java:2531) ~[na:1.7.0_51] at java.lang.Class.getDeclaredMethods(Class.java:1855) ~[na:1.7.0_51] at com.google.inject.internal.ProviderMethodsModule.getProviderMethods (ProviderMethodsModule.java:81) ~[guice-3.0.jar:na] at com.google.inject.internal.ProviderMethodsModule.configure (ProviderMethodsModule.java:73) ~[guice-3.0.jar:na] at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223) ~[guice-3.0.jar:na] at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:232) ~[guice-3.0.jar:na] at com.google.inject.spi.Elements.getElements(Elements.java:101) ~[guice-3.0.jar:na] at com.google.inject.spi.Elements.getElements(Elements.java:92) ~[guice-3.0.jar:na]
It seems like jersey core was needed but how do I get around this problem?