从Gradle依赖中排除包

12

我遇到了一个问题,即在我的类路径中出现了同一类的多个版本。所涉及的类是javax.ws.rs.core.UriBuilder。我想要使用的版本是由javax.ws.rs:javax.ws.rs-api:2.0.1引入的。然而,我们还使用Jira rest客户端库,它依赖于旧版本的jersey(com.sun.jersey:jersey-core),其中包含了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客户端中会导致类未找到异常。

据我所知,此时我的选择有:

  1. 回退到使用Jersey 1.x和其对jsr311的实现
  2. 通过gradle从旧的jersey客户端中排除javax.ws包。

我想继续使用更新版本的Jersey,因此#2是我理想的解决方案,但我不确定它是否可行。有人知道如何处理吗?如果不可能,我也愿意听取其他建议。

3个回答

16

您可以像这样排除一个传递依赖模块:

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

参考:50.4.7 这里


问题在于javax不是一个传递依赖项,它包含在com.sun.jersey:jersey-core jar中。请参见包部分中的javax.ws包。http://mvnrepository.com/artifact/com.sun.jersey/jersey-core/1.17 - matheeeny
你在问题中添加的依赖是不是 http://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-client/2.17?这里需要 javax.wx.rs 作为依赖。 - RaGe
是的,我正在添加org.glassfish.jersey.core,但Jira引入了com.sun.jersey,其中包含了javax.ws.rs。 - matheeeny
我们有没有一种方法可以向依赖项添加额外的依赖关系?(例如“包括'com.example.other.library'”) - HF_

2

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

0

请将以下组和模块排除。

例如:

implementation('org.apache.httpcomponents:httpclient:4.5.13') {
    exclude group: 'commons-codec', module: 'commons-codec'
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接