如何使用 Maven BOM(物料清单)来管理 SBT 中的依赖项?

问题描述 投票:0回答:4

我想使用外部 BOM 来管理 SBT 中项目的依赖项版本。

例如,AWS Java SDK 将物料清单工件发布到其 Maven 存储库:https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-bom/1.11.86

我可以使用它来管理 AWS SDK 中的依赖项版本。在 Maven 中,我可以通过将 BOM 添加到我的

<dependencyManagement>
部分来做到这一点,如下所示:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-bom</artifactId>
      <version>1.11.86</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

然后,当我想使用 BOM 中涵盖的模块时,我可以省略版本,BOM 将为我解决它:

<dependencies>
  <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
  </dependency>
  <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-sns</artifactId>
  </dependency>
</dependencies>

类似地,在 Gradle 中,我可以使用 BOM 来使用这个插件来管理依赖项,如下所示:

apply plugin: "io.spring.dependency-management"

dependencyManagement {
    imports {
        mavenBom 'com.amazonaws:aws-java-sdk-bom:1.11.86'
    }
}

dependencies {
    compile 'com.amazonaws:aws-java-sdk-sns'
    compile 'com.amazonaws:aws-java-sdk-s3'
}

SBT 有类似的插件吗?

scala sbt maven-bom
4个回答
3
投票

我正在寻找相同的东西并且已经搜索了很多地方。

我发现最有趣的事情是 SBT 项目上似乎有 Open Ticket:

https://github.com/sbt/sbt/issues/4531

等不及解决了!


0
投票

您尝试过将 Ivy 与 sbt 一起使用吗?它允许您使用

rev="+"

指定“获取最新”
<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven" xmlns:e="http://ant.apache.org/ivy/extras">
    <dependencies>
        <dependency org="com.amazonaws" name="aws-java-sdk-s3" rev="+" conf="compile->compile(*),master(*);runtime->runtime(*)" />
    </dependencies>
</ivy-module>

参见 http://www.scala-sbt.org/1.0/docs/Library-Dependency.html


0
投票

如果我理解正确,您可以将其添加到您的库依赖项中:

"com.amazonaws" % "aws-java-sdk-bom" % "1.11.800" pomOnly()

您仍然必须将该版本号放入变量中并将其与您真正想要的 SDK 一起使用,除非有人知道在修订字段中使用的正确魔法。我知道如果您想要最新的发行版本,可以去

latest.release


0
投票

正如 @tdebroc 所提到的,sbt 不支持开箱即用地导入 Maven BOM。

使用 SBT 的 Maven BOM 文件的插件已实现,源代码已在 Github 上发布:https://github.com/heremaps/here-sbt-bom

该插件支持从公共存储库和受密码保护的存储库导入 BOM 文件。

公开回购说明:

首先,创建一个

Dependency.scala
文件:

import sbt._
import com.here.bom.Bom

case class Dependencies(platformBom: Bom) {
    val dependencies: Seq[ModuleID] = Seq(
        "dependency.group.id" % "artifact" % platformBom
    )
}

其次,将 sbt-bom 插件添加到

plugins.sbt
文件中。

addSbtPlugin("com.here.platform" % "sbt-bom" % "1.0.1")

然后,将您想要的 BOM 文件包含在您的

build.sbt

import Dependencies._
import com.here.bom.Bom

lazy val deps = Bom.read("bom.group.id" % "bom" % "bom.version")(bom => Dependencies(bom))

lazy val `demo` = project
    .in(file("."))
    .settings(scalaVersion := "2.12.15")
    .settings(deps)
    .settings(
        name := "simple-project",
        libraryDependencies ++= deps.key.value.dependencies,
        resolvers := Resolver.DefaultMavenRepository +: resolvers.value
)

有关完整示例,请参阅:https://github.com/heremaps/here-sbt-bom/tree/master/plugin/src/sbt-test/bom/simple_1.6.1

© www.soinside.com 2019 - 2024. All rights reserved.