2016-02-29 80 views
1

我使用的是grails 2.5,並且在我的項目中使用了grails spring websockets,一切正常。現在,我想實現登錄與谷歌加入Maven的依賴關係BuildConfig爲谷歌API客戶端:不包括來自grails的maven依賴項BuildConfig

compile 'com.google.api-client:google-api-client:1.20.0' 

而現在,當我運行的應用程序,我得到這個錯誤

java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering() 

這是因爲Spring的websocket插件和google api客戶端使用的Jackson庫之間存在衝突。 正如我所看到的,它看起來像谷歌API是使用過時版本的傑克遜。 是否有可能排除傑克遜從maven依賴項導入?我知道從grails插件可以添加'排除'。但它似乎並不爲行家依賴工作,我已經添加了這一點,但沒有運氣:

compile 'com.google.api-client:google-api-client:1.20.0', { excludes "com.google.api-client:google-api-client-jackson2:1.20.0" } 

只是提醒,谷歌的API客戶端的依賴是在「依賴」的BuildConfig組,這是使用mavenCentral()來獲得依賴關係,而不是在'插件'下。

有誰知道我該如何解決這個問題?

感謝

編輯:可能不理想,但我可以解決這個問題,只是加入了最新的傑克遜依賴

compile 'com.google.api-client:google-api-client:1.20.0', { 
     excludes "com.google.api-client:google-api-client-jackson2:1.20.0" 
    } 
    compile 'com.fasterxml.jackson.core:jackson-core:2.7.2' 
+0

嘗試'排除'google-api-client-jackson2''而不是全名。它適用於我們的簡單依賴關係,沒有問題。依賴關係必須在'dependencies {}'而不是'plugins {}'下定義 – droggo

回答

0

我不認爲你正在嘗試做的是可能的。排除可以用於插件,因爲源代碼是在本地下載和編譯的。對於依賴關係,您正在使用maven,它正在下載jar。你不能告訴maven排除部分jar。

您要使用的Google代碼可能取決於其所依賴的Jackson版本的其他方法,這些方法不存在於您要使用的版本中。在這種情況下,如果Maven允許排除Google公佈的傑克遜版本,那麼谷歌圖書館甚至不會工作。 (如果他們需要一個不同的版本,一些圖書館在編譯時會發生的插件同樣的問題。)

你可以嘗試製作自己的使用傑克遜的首選版本的谷歌罐子的版本。如果它不依賴於舊版傑克遜的方法,那可以奏效。