首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在build.sbt中,父项目中的依赖项没有反映在子模块中。

在build.sbt中,父项目中的依赖项没有反映在子模块中。
EN

Stack Overflow用户
提问于 2018-11-23 11:52:37
回答 2查看 1.3K关注 0票数 4

我在intellij 2017.1.6 ide中使用SBT1.8.0作为我的星火scala项目。我想要创建一个父项目和它的子项目模块。到目前为止,这是我的build.sbt中的内容:

代码语言:javascript
运行
复制
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"
)

现在,我可以从父模块中的星火流或星火池库依赖项导入任何类,但不能在任何子模块中导入和使用它们。只有当我在any子模块中显式地将它们指定为库依赖项时,我才能使用它们。

  1. 我正在寻找类似于Maven构建的pom.xml中的依赖项标记的东西。
  2. 如果我对每个子模块使用单独的build.sbt,会有什么不同吗?
  3. 另外,如果我在父配置中执行.aggregate( etl ),它将在稍后声明etl时显示错误。但是,如果在父级之前定义etl,则无法在etl配置中执行.dependsOn(父级)。

请帮我解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-23 13:25:38

我的多模块项目只使用父项目构建所有内容,并委托运行到“服务器”项目:

代码语言:javascript
运行
复制
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
    }
  )

我将设置(例如依赖项)分组到另一个文件中,例如:

代码语言:javascript
运行
复制
  lazy val sharedDependencies: Seq[Def.Setting[_]] = Def.settings(libraryDependencies ++= Seq(
    "org.julienrf" %%% "play-json-derived-codecs" % "4.0.0"
   ...
    , "org.scalatest" %%% "scalatest" % scalaTestV % Test

  ))

现在,每个子模块只添加所需的内容,例如:

代码语言:javascript
运行
复制
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文件。

票数 2
EN

Stack Overflow用户

发布于 2021-05-06 07:58:57

provided->provided中使用dependsOn帮助我解决了一个类似的问题:

所以,就像:

代码语言:javascript
运行
复制
lazy val etl = Project("spark-etl-etl",file("etl"))
.dependsOn(parent % "compile->compile;test->test;provided->provided")
.settings(
name := "spark-etl-etl_1.0",
version := "1.0",
scalaVersion := "2.11.1"
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53446212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档