【问题标题】:SBT complains about Maven's RELEASE as version of (transitive) dependencies?SBT 抱怨 Maven 的 RELEASE 作为(传递)依赖的版本?
【发布时间】:2014-02-18 02:13:27
【问题描述】:

我正在尝试在 Play 2.2.1 项目的 build.sbt 文件中添加 "com.google.api-ads" % "adwords-axis" % "1.23.0" 作为依赖项。当我使用play eclipse 生成eclipse 项目文件时,出现以下错误:

[error] (*:update) sbt.ResolveException: unresolved dependency: com.google.http-client#google-http-client-jackson2;RELEASE: not found

后来我发现adwords-axis依赖于ads-lib,它有以下依赖(注意RELEASE版本):

<dependency>
  <groupId>com.google.http-client</groupId>
  <artifactId>google-http-client-jackson2</artifactId>
  <version>RELEASE</version>
</dependency>

我在这个answer中读到可以在Maven中将版本指定为RELEASE

SBT 是否不允许将版本指定为RELEASE?如果是这样,是否有解决方法来使用 adwords-axis 依赖项?

【问题讨论】:

    标签: maven playframework-2.0 sbt playframework-2.2


    【解决方案1】:

    我认为 SBT 中没有这样的功能,这也可能不是一个好主意,因为 API 可能会在两个版本之间完全更改,然后您的项目将下载任何新版本,使您的构建不可重复,如果您从您的 VCS 中检查一个旧版本,它不确定它是否会编译等。因此,使用 RELEASE 作为任何依赖项的版本的库的项目维护者是一个非常糟糕的决定。

    你可以做的是弄清楚它现在会解析到哪个版本,如果它真的有效,然后用特定版本的 google-http-client-jackson2 覆盖传递依赖并直接依赖它。

    例如(不是我只是随机猜测 0.17.0-rc 会是一个好版本):

    libraryDependencies := Seq(
      "com.google.api-ads" % "adwords-axis" % "1.23.0",
      "com.google.http-client" % "google-http-client-jackson2" % "1.17.0-rc"
    )
    

    【讨论】:

    • 我已经看到在 maven 中排除了传递依赖。我会尝试你的建议并回来。谢谢
    • 在 sbt 中还支持以几种方式排除传递依赖,但我猜你实际上需要 http-client。
    猜你喜欢
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 2016-03-21
    • 2023-04-11
    • 1970-01-01
    • 2020-06-24
    • 2012-02-27
    相关资源
    最近更新 更多