运行我的项目时出现java.lang.NoClassDefFoundError错误 [英] java.lang.NoClassDefFoundError error when running my project
问题描述
我一直在努力使它正常工作,我认为我可以使用一些帮助.我正在一个Java项目中,其中pom.xml具有一堆依赖关系,其中一些依赖关系本身间接依赖于此jar:
com.sun.jersey:jersey-core:1.17.1
像这样:
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>
我需要在pom中使用这个特定的jar,因为我想使用jax-rs api中的新功能:
javax.ws.rs:javax.ws.rs-api:2.0
.问题是当我构建项目时出现此错误:
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
...
..
我试图通过从依赖项中排除com.sun.jersey:jersey-core:1.17.1
来解决此问题,通过检查依赖关系树将其包括在其中.
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?
推荐答案
您不能混合使用JAX-RS
/Jersey
版本
-
Jersey
版本 1 是JAX-RS 1的参考实现.Jersey
版本 1 使用com.sun.jersey
组/程序包前缀.
Jersey
version 1 is the reference implementation for JAX-RS 1.Jersey
version 1 uses thecom.sun.jersey
group / package prefix.
Jersey
版本 2 是JAX-RS 2的参考实现.Jersey
版本 2 使用org.glassfish.jersey
组/程序包前缀
Jersey
version 2 is the reference implementation for JAX-RS 2. Jersey
version 2 uses the org.glassfish.jersey
group / package prefix
如果在类路径上同时具有两个Jersey版本或两个JAX-RS版本,则会得到许多NoClassDefFoundError
,NoSuchMethodError
或类似名称.
If you have both Jersey versions, or both JAX-RS versions on your classpath, you'll get lots of NoClassDefFoundError
, NoSuchMethodError
or similar.
如果可能,请使用JAX-RS
/Jersey
版本2
If possible use JAX-RS
/ Jersey
version 2
这篇关于运行我的项目时出现java.lang.NoClassDefFoundError错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!