我正在使用 grails 2.5,并在我的项目中使用 grails spring websockets,一切正常。现在,由于我想实现使用 Google 登录,因此将 Maven 依赖项添加到了 Google api 客户端的 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 库之间存在冲突。 正如我所看到的,看起来 google api 使用的是过时版本的 jackson。 是否可以排除从 Maven 依赖项导入的 Jackson?我知道 grails 插件可以添加“排除”。但它似乎不适用于 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() 来获取依赖项,而不是在“插件”下。
有人知道我该如何解决这个问题吗?
谢谢
编辑:可能不理想,但我只需添加最新的 jackson 依赖项就可以解决这个问题
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'
最佳答案
我认为您尝试做的事情是不可能的。排除可以适用于插件,因为源代码是在本地下载和编译的。对于依赖项,您正在使用 maven,它正在下载 jar。你不能告诉 maven 排除 jar 的一部分。
您要使用的 Google 代码可能取决于它所依赖的 Jackson 版本的其他方法,而您要使用的版本中不存在这些方法。在这种情况下,如果 Maven 允许排除 Google 声明的 Jackson 版本,那么 Google 库甚至无法工作。 (如果插件在编译时需要某个库的不同版本,也会出现同样的问题。)
您可以尝试使用您首选的 Jackson 版本制作自己的 Google jar 版本。如果它不依赖于旧版本 Jackson 的方法,那是可行的。
关于java - 从 grails BuildConfig 中排除 Maven 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35690213/