从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 def foundexception。

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

  1. 恢复使用Jersey 1.x并执行jsr311
  2. 不知何故,gradle从旧的泽西客户端中排除了javax.ws包。

我想继续使用更新版的jersey,所以#2将是我理想的解决方案,但我不确定它是否可能。 有谁知道如何去做? 如果那是不可能的,我会接受其他建议。

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

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

ref: 50.4.7在这里

我发现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' } }