我想使用外部 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 有类似的插件吗?
我正在寻找相同的东西并且已经搜索了很多地方。
我发现最有趣的事情是 SBT 项目上似乎有 Open Ticket:
https://github.com/sbt/sbt/issues/4531
等不及解决了!
您尝试过将 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
如果我理解正确,您可以将其添加到您的库依赖项中:
"com.amazonaws" % "aws-java-sdk-bom" % "1.11.800" pomOnly()
您仍然必须将该版本号放入变量中并将其与您真正想要的 SDK 一起使用,除非有人知道在修订字段中使用的正确魔法。我知道如果您想要最新的发行版本,可以去
latest.release
。
正如 @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