开发者社区> 问答> 正文

在build.sbt中,父项目中的依赖项未反映在子模块中

我在intellij idea 2017.1.6 ide中使用SBT 1.8.0作为我的spark scala项目。我想创建一个父项目及其子项目模块。到目前为止,这是我在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 config中执行.dependsOn(parent)。

展开
收起
社区小助手 2018-12-11 17:29:23 2505 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    我的多模块项目仅使用父项目来构建所有内容并将运行委托给'server'项目:

    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文件以获取依赖项。

    2019-07-17 23:19:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载