В build.sbt зависимости в родительском проекте не отражены в дочерних модулях - PullRequest
0 голосов
/ 23 ноября 2018

Я использую SBT 1.8.0 для своего проекта Spark Scala в IntelliJ Idea 2017.1.6 ide.Я хочу создать родительский проект, а также его дочерние модули проекта.Пока что это то, что у меня есть в моем 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 в родительском модуле, но не могу импортировать ииспользуйте их в любом из дочерних модулей.Только если я явно укажу их как библиотечную зависимость в любом дочернем модуле, я смогу их использовать.

  1. Я ищу что-то похожее на тег зависимостей в pom.xml со сборкой Maven.
  2. Будет ли иметь значение, если я использую отдельный build.sbt для каждого из дочерних модулей?
  3. Также, если я делаю .aggregate (etl) в родительском конфиге, он показывает ошибку как etl isобъявил позже.Но если я определю etl перед parent, я не смогу сделать .dependsOn (parent) в конфиге etl.

Пожалуйста, помогите мне с решением, чтобы исправить это.

1 Ответ

0 голосов
/ 23 ноября 2018

Мой многомодульный проект использует родительский проект только для сборки всего и запуска делегата для проекта '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 файл для зависимостей.

...