2015-06-19 180 views
2

我遇到了同一個類的多個版本顯示在我的類路徑中的問題。有問題的班級是javax.ws.rs.core.UriBuilder。我想使用的版本是由javax.ws.rs:javax.ws.rs-api:2.0.1引入的。然而,我們也使用Jira休息客戶端庫,它依賴於舊版澤西島(com.sun.jersey:jersey-core),該澤西島包含捆綁在其jar中的java.ws包。從Gradle依賴中排除軟件包

這裏是從構建文件的示例片段:

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,因爲它來自新版本使用不同的包名,並會造成類DEF沒有找到吉拉客戶例外。

至於我可以告訴大家,我在這一點上的選項有:

  1. 恢復使用澤西1.x和它的實現JSR311
  2. 莫名其妙地gradle這個從舊球衣排除javax.ws包客戶。

我想繼續使用更新版本的球衣,所以#2將是我理想的解決方案,但我不確定是否有可能。有誰知道如何去做這件事?如果這是不可能的,我接受其他建議。

回答

0

我發現com.sun.jersey:球衣核心: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' 
    } 
} 
1

可以排除傳遞依賴模塊是這樣的:

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

裁判:50.4.7 here

+0

問題是,javax不是傳遞依賴項,它包含在com.sun.jersey:jersey-core jar中。 http://mvnrepository.com/artifact/com.sun.jersey/jersey-core/1.17請參閱軟件包部分中的javax.ws軟件包。 – matheeeny

+0

是不是http://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-client/2.17這是什麼你添加爲你的問題的依賴?這裏是javax.wx.rs的依賴關係。 – RaGe

+0

是的,我加入了org.glassfish.jersey.core,但是Jira帶來了con.sun.jersey,它包含了它的jar包中的javax.ws.rs。 – matheeeny