在 build.sbt 中提供依赖项的项目的 sbtpublishLocal 不会使这些依赖项对使用该项目作为库的项目可见

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

假设我有一个带有此 build.sbt 的项目“内部库”:

organization := "com.foo"
name := "internal-library"
version := "1.0.0"
scalaVersion := "2.13.13"

...other stuff...

libraryDependencies += "com.mysql" % "mysql-connector-j" % "8.0.32"
libraryDependencies += "com.clickhouse" % "clickhouse-jdbc" % "0.4.6"

...other dependencies...

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "3.5.1" % "provided",
  "org.apache.spark" %% "spark-sql" % "3.5.1" % "provided"
)

项目“内部库”包含对许多其他项目有用的代码和依赖项,并使用命令

sbt clean publishLocal
将其发布在本地存储库中。

现在,假设我有一个带有此 build.sbt 的项目“abc”:

organization := "com.foo"
name := "abc"
version := "1.0.0"
scalaVersion := "2.13.13"

...other stuff...

libraryDependencies += "com.foo" %% "internal-project" % "1.0.0"

“internal-project”的 build.sbt 中声明的所有依赖项也是可见的,并且可用于编译到项目“abc”,除了提供的声明的依赖项之外。

此时,我还被迫在子项目中添加 Spark 库依赖项,但我希望仅在一个位置声明它们,并且应按提供的方式声明它们,因为 Spark 集群已经拥有 Spark 的 jar,但它没有不需要将它们放在“abc”项目的胖罐子中。

scala apache-spark sbt
1个回答
0
投票

我找到了解决方案。 子项目(‘abc’项目)的 build.sbt 应该是:

organization := "com.foo"
name := "abc"
version := "1.0.0"
scalaVersion := "2.13.13"

...other stuff...

libraryDependencies += "com.foo" %% "internal-project" % "1.0.0" % "compile->compile;provided->provided"

通过这种方式,您可以避免包含已在父项目(“内部库”)中声明的提供的依赖项。

我通过堆栈溢出上的answer和 sbt documentation获得了这个解决方案的灵感。

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