【问题标题】:excluding a maven dependency from grails BuildConfig从 grails BuildConfig 中排除 maven 依赖项
【发布时间】:2016-06-11 22:34:54
【问题描述】:

我正在使用 grails 2.5,并且在我的项目中使用 grails spring websockets,一切正常。现在,由于我想使用 Google 实现登录,因此将 maven 依赖项添加到 BuildConfig 以用于 google api 客户端:

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 插件中添加“排除”。但它似乎不适用于 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 中的 'dependencies' 组下,它使用 mavenCentral() 来获取依赖项,而不是在 'plugins' 下。

有人知道我该如何解决这个问题吗?

谢谢

编辑:可能不太理想,但我可以通过添加最新的杰克逊依赖项来解决这个问题

    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'

【问题讨论】:

  • 试试excludes 'google-api-client-jackson2'而不是全名。它适用于我们没有问题的简单依赖项。依赖关系必须定义在dependencies{}而不是plugins{}
  • @nelson687 你有没有找到答案?

标签: java maven grails


【解决方案1】:

我认为您尝试做的事情是不可能的。排除可以用于插件,因为源是在本地下载和编译的。对于依赖项,您使用的是 maven,它正在下载 jar。您不能告诉 maven 排除 jar 的一部分。

您要使用的 Google 代码可能依赖于它所依赖的 Jackson 版本的其他方法,这些方法在您要使用的版本中不存在。在这种情况下,如果 Maven 允许排除 Google 声明的 Jackson 版本,Google 库甚至将无法工作。 (如果插件在编译时需要某个库的不同版本,也会出现同样的问题。)

您可以尝试使用您喜欢的 Jackson 版本制作自己的 Google jar 版本。如果它不依赖于旧版本杰克逊的方法,那可能会奏效。

【讨论】:

    猜你喜欢
    • 2015-09-29
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 2011-10-19
    • 2023-03-04
    • 2015-09-23
    • 1970-01-01
    相关资源
    最近更新 更多