4

我正在使用 sbt 构建一个多模块项目,并且我想使用 sbt-buildinfo 来允许其中一项服务包含此信息以进行调试和版本控制。

问题在于 sbt-buildinfo 插件似乎只获取根项目的库依赖项,而不是聚合子项目的所有依赖项。在我看来,如果您在聚合之后运行插件,那么根项目中就会包含这些依赖项并且会显示出来,但它们不会。也许我只是不理解这里的过程,但这对我来说似乎是合理的。

现在,这对一个项目非常有效,但对于许多子项目,它不再有效。另外现在它甚至不再生成文件,我现在不知道我在做什么错。这是我的构建。任何帮助表示赞赏。

EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Managed

lazy val sharedSettings = Seq(
    organization := "com.planalytics",
    version      := "0.0.1-SNAPSHOT",
    name         := "Ingestions",
    scalaVersion := "2.11.7",
  exportJars   := true
) ++ net.virtualvoid.sbt.graph.Plugin.graphSettings ++ Defaults.defaultSettings

lazy val sparkVersion = "1.5.1"
lazy val akkaVersion  = "2.3.12"
lazy val sprayVersion = "1.3.3" 
lazy val hadoopVersion = "2.7.1"

lazy val exclusionRules = Seq(ExclusionRule(organization = "org.slf4j"), 
                              ExclusionRule(organization = "org.apache.hadoop"))

lazy val sharedDeps = Seq(libraryDependencies ++= Seq(
          "org.slf4j"       %  "slf4j-log4j12"  % "1.7.10",
          "org.scalacheck"  %% "scalacheck"     % "1.12.0"  % "test",
          "org.scalatest"   %% "scalatest"      % "2.2.4"   % "test",
          "org.scalanlp"    %% "breeze-natives" % "0.11.2"))

lazy val sparkDeps = Seq(libraryDependencies ++= Seq(
          "org.apache.spark"      %% "spark-core"    % sparkVersion  excludeAll(exclusionRules: _*), 
          "org.apache.spark"      %% "spark-sql"     % sparkVersion  excludeAll(exclusionRules: _*), 
          "org.apache.spark"      %% "spark-mllib"   % sparkVersion  excludeAll(exclusionRules: _*), 
          "com.databricks"        %% "spark-csv"     % "1.2.0"       excludeAll(exclusionRules: _*), 
          "org.apache.hadoop"     %  "hadoop-common" % hadoopVersion,
          "org.apache.hadoop"     %  "hadoop-client" % hadoopVersion,
          "org.apache.hadoop"     %  "hadoop-hdfs"   % hadoopVersion,
          "org.apache.hadoop"     %  "hadoop-aws"    % hadoopVersion))
lazy val akkaDeps  = Seq(libraryDependencies ++= Seq(
          "com.typesafe.akka"     %% "akka-actor"    % akkaVersion,
          "com.typesafe.akka"     %% "akka-cluster"  % akkaVersion,
          "com.typesafe.akka"     %% "akka-remote"   % akkaVersion,
          "com.typesafe.akka"     %% "akka-slf4j"    % akkaVersion))
lazy val sprayDeps = Seq(libraryDependencies ++= Seq(
                "io.spray"              %% "spray-can"     % sprayVersion,
          "io.spray"              %% "spray-routing" % sprayVersion,
          "io.spray"              %% "spray-json"    % "1.3.2"))

lazy val root = (project in file(".")).
    settings(sharedSettings: _*).
    settings(   
        scalacOptions += "-deprecation",
        javacOptions ++= Seq("-source", "1.8", "target", "1.8"),
        javaOptions   += "-Xmx2G").aggregate(ingestion, services, util).enablePlugins(BuildInfoPlugin).
  settings(
    buildInfoKeys    :=  Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion),
    buildInfoOptions +=  BuildInfoOption.BuildTime,
    buildInfoPackage :=  "com.planalytics",
    buildInfoObject  := "BuildInfo"
  )

lazy val ingestion = Project(
  id = "Ingestion-Engine", 
    base = file("ingestion"),
    settings = Project.defaultSettings ++ sharedSettings ++ sparkDeps ++ akkaDeps ++ sharedDeps).
    settings(
      name := "Ingestion-Engine",
    libraryDependencies ++= Seq(
          "com.github.seratch"    %% "awscala"       % "0.5.+",
      "com.typesafe.akka"     %% "akka-testkit"  % akkaVersion  % "test"
        )
).dependsOn(util)

lazy val services = Project(
  id = "Ingestion-Services", 
  base = file("services"),
  settings = Project.defaultSettings ++ sharedSettings ++ sprayDeps ++ sharedDeps).
  settings(
    name := "Ingestion-Services",
  libraryDependencies ++= Seq(
        "io.spray"              %% "spray-testkit" % sprayVersion % "test"
    )
).dependsOn(ingestion)

lazy val util = Project(
  id = "Ingestion-Util", 
  base = file("util"),
  settings = Project.defaultSettings ++ sharedSettings ++ sparkDeps ++ sharedDeps).
  settings(
    name := "Ingestion-Utils",
    libraryDependencies ++= Seq(
        "net.ceedubs" %% "ficus" % "1.1.2"
    ),
  dependencyOverrides ++= Set(
    "com.fasterxml.jackson.core" % "jackson-databind" % "2.4.4"
  )
)

我也对我的构建的任何想法持开放态度,我觉得我做错了或重复了一些事情,所以任何建议也很感激。谢谢!

4

0 回答 0