运行我的项目时出现java.lang.NoClassDefFoundError错误

use*_*951 6 java jax-rs jax-ws maven jersey-client

我一直在努力让这个工作,我想我可以使用一些帮助.我正在开发一个Java项目,其中pom.xml有一堆依赖项,其中一些依赖于这个jar: com.sun.jersey:jersey-core:1.17.1这样:

<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.0.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我需要在我的pom中使用这个特殊的jar,因为我想在jax-rs api中使用新功能: javax.ws.rs:javax.ws.rs-api:2.0.问题是当我构建我的项目时出现这个错误:

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
...
..
Run Code Online (Sandbox Code Playgroud)

我试图com.sun.jersey:jersey-core:1.17.1通过检查依赖树来排除包含它的依赖项来解决这个问题.

<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> 
Run Code Online (Sandbox Code Playgroud)

现在项目构建正常,但是当我尝试运行它时,我收到此错误:

    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]
Run Code Online (Sandbox Code Playgroud)

看起来需要球衣核心,但我该如何解决这个问题呢?

Wil*_*ill 7

你不能混合JAX-RS/ Jersey版本

  • Jersey版本1是JAX-RS的参考实现1. Jersey版本1使用com.sun.jersey组/包前缀.

  • Jersey版本2是JAX-RS 2的参考实现.Jersey版本2使用org.glassfish.jersey组/包前缀

如果你有两个版本的球衣,或者在你的classpath既JAX-RS版本,你会得到很多的NoClassDefFoundError,NoSuchMethodError或类似的.

如果可能,请使用JAX-RS/ Jersey版本2