簡體   English   中英

從 Gradle 依賴中排除包

[英]Exclude Package From Gradle Dependency

我遇到了一個問題,即我的類路徑中出現了同一個類的多個版本。 有問題的類是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 客戶端中出現 class def not found 異常。

據我所知,此時我的選擇是:

  1. 恢復使用 Jersey 1.x 和它的 jsr311 實現
  2. 不知何故,gradle 從舊的 jersey 客戶端中排除了javax.ws包。

我想繼續使用較新版本的球衣,所以 #2 將是我理想的解決方案,但我不確定它是否可能。 有誰知道如何解決這個問題? 如果這是不可能的,我願意接受其他建議。

您可以像這樣排除傳遞依賴模塊:

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

參考: 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' 
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM