java - 从 grails BuildConfig 中排除 Maven 依赖项

标签 java maven grails

我正在使用 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/

相关文章:

java - 如果命令行中没有任何内容,如何打印错误?

java - 在 IntelliJ 上调试 tomEE

spring - 如何配置 Eclipse 以使用 `ehcache`

maven - Pax Exam 4 和多个 Maven 存储库无法正常工作

java - 在 JTable 中插入后如何进行排序(RowSort)?

java - Android - 在 Android 中用按钮控制 LED

java - LibGDX圆形物体不断滚动

grails - 从 Controller 传递到 Grails 中的 View

grails - 不能在Intellij 14.1 CE中导入Grails和Gradle

grails - Grails Controller 映射,完全误解