我正在使用grails 2.5并在我的项目中使用grails spring websockets,一切都很好。现在,因为我想实现登录,谷歌为google api客户端添加了对BuildConfig的maven依赖:
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插件可以添加'exclude'。但它似乎不适用于maven依赖,我添加了这个,但没有运气:
compile 'com.google.api-client:google-api-client:1.20.0', { excludes "com.google.api-client:google-api-client-jackson2:1.20.0" }
提醒一下,google 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 :(得分:0)
我不认为你想要做的事情是可能的。排除对插件有效,因为源是在本地下载和编译的。对于依赖项,您正在使用正在下载jar的maven。你不能告诉maven排除部分jar。
您要使用的Google代码可能取决于您要使用的版本中不存在的Jackson所依赖的其他方法。在这种情况下,如果Maven允许排除谷歌宣布的杰克逊版本,那么Google图书馆甚至无法使用。 (如果插件在编译时需要某个库的不同版本,则会出现同样的问题。)
您可以尝试制作自己版本的Google jar,它使用您首选的Jackson版本。如果它不依赖于旧版杰克逊的方法,那可能会奏效。