从Gradle依赖项中排除包

时间:2015-06-19 16:20:36

标签: java web-services rest gradle

我遇到了一个问题,即我的类路径中出现了同一个类的多个版本。有问题的班级是javax.ws.rs.core.UriBuilder。我想要使​​用的版本由javax.ws.rs:javax.ws.rs-api:2.0.1引入。但是,我们还使用Jira rest客户端库,该库依赖于旧版本的jersey(com.sun.jersey:jersey-core),其中包含捆绑在其jar中的java.ws包。

以下是构建文件中的示例代码段:

dependencies {
  compile 'com.atlassian.jira:jira-rest-java-client-core:2.0.0-m31'
  compile 'javax.ws.rs:javax.ws.rs-api:2.0.1'
  compile 'org.glassfish.jersey.core:jersey-client:2.17'
}

我无法删除com.sun.jersey:jersey-core,因为它在新版本中使用了不同的包名称,并且会在Jira客户端中导致类别def找不到异常。

据我所知,我现在的选择是:

  1. 恢复使用Jersey 1.x并执行jsr311
  2. 以某种方式让gradle从旧泽西客户端中排除javax.ws包裹。
  3. 我想继续使用更新版的球衣,所以#2将是我理想的解决方案,但我不确定它是否可能。有谁知道如何去做?如果那是不可能的,我会接受其他建议。

2 个答案:

答案 0 :(得分:6)

您可以排除这样的传递依赖模块:

   compile ('org.glassfish.jersey.core:jersey-client:2.17') {
      exclude group: 'javax.ws.rs'
      exclude module: 'javax.ws.rs-api'
   }

参考:50.4.7 here

答案 1 :(得分:1)

我发现com.sun.jersey:jersey-core:1.19没有捆绑javax.ws.rs类文件,而是将它们列为编译时依赖项。将此代码段添加到我的build.gradle中可以解决问题。

configurations.all {
  resolutionStrategy {
    // For a version that doesn't package javax.ws
    force 'com.sun.jersey:jersey-core:1.19' 
  }
}