gpt4 book ai didi

scala - 在 build.sbt 中,父项目中的依赖项未反射(reflect)在子模块中

转载 作者:行者123 更新时间:2023-12-04 19:31:12 25 4
gpt4 key购买 nike

我在 intellij idea 2017.1.6 ide 中为我的 spark scala 项目使用 SBT 1.8.0。我想创建一个父项目及其子项目模块。到目前为止,这就是我在 build.sbt 中的内容:

lazy val parent = Project("spark-etl-parent",file("."))
.settings(
name := "spark-etl-parent_1.0",
scalaVersion := "2.11.1",
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-streaming" % sparkVersion % "provided"
"org.apache.spark" %% "spark-hive" % sparkVersion % "provided")
)

lazy val etl = Project("spark-etl-etl",file("etl"))
.dependsOn(parent)
.settings(
name := "spark-etl-etl_1.0",
version := "1.0",
scalaVersion := "2.11.1"
)

lazy val redshiftBasin = Project("spark-etl-
redshiftBasin",file("redshiftBasin"))
.dependsOn(parent)
.settings(
name := "spark-etl-redshiftBasin_1.0",
version := "1.0",
scalaVersion := "2.11.1"
)


lazy val s3Basin = Project("spark-etl-s3Basin",file("s3Basin"))
.dependsOn(parent)
.settings(
name := "spark-etl-s3Basin_1.0",
version := "1.0",
scalaVersion := "2.11.1"
)

现在我可以从父模块中的 spark-streaming 或 spark-hive 库依赖项中导入任何类,但不能在任何子模块中导入和使用它们。只有当我在任何子模块中明确地将它们指定为库依赖项时,我才能使用它们。
  • 我正在使用 Maven 构建在 pom.xml 中寻找类似于依赖项标记的内容。
  • 如果我为每个子模块使用单独的 build.sbt 会有所不同吗?
  • 此外,如果我在父配置中执行 .aggregate(etl) ,它会显示错误,因为稍后会声明 etl。但是,如果我在父级之前定义 etl,我将无法在 etl 配置中执行 .dependsOn(parent) 。

  • 请帮助我解决这些问题。

    最佳答案

    我的多模块项目仅使用父项目来构建所有内容并将运行委托(delegate)给“服务器”项目:

    lazy val petstoreRoot = project.in(file(".")).
    aggregate(sharedJvm, sharedJs, server, client)
    .settings(organizationSettings)
    .settings(
    publish := {}
    , publishLocal := {}
    , publishArtifact := false
    , isSnapshot := true
    , run := {
    (run in server in Compile).evaluated
    }
    )

    我在另一个文件中分组的设置(例如依赖项),例如:
      lazy val sharedDependencies: Seq[Def.Setting[_]] = Def.settings(libraryDependencies ++= Seq(
    "org.julienrf" %%% "play-json-derived-codecs" % "4.0.0"
    ...
    , "org.scalatest" %%% "scalatest" % scalaTestV % Test

    ))

    现在每个子模块只添加所需的内容,例如:
    lazy val server = (project in file("server"))
    .settings(scalaJSProjects := Seq(client))
    .settings(sharedSettings(Some("server"))) // shared dependencies used by all
    .settings(serverSettings)
    .settings(serverDependencies)
    .settings(jvmSettings)
    .enablePlugins(PlayScala, BuildInfoPlugin)
    .dependsOn(sharedJvm)

    您可以在这里找到整个项目: https://github.com/pme123/scala-adapters

    project/Settings依赖项的文件。

    关于scala - 在 build.sbt 中,父项目中的依赖项未反射(reflect)在子模块中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53446212/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com