Spark为了依赖项的统一管理用了sbt pom reader这个插件,sbt编译发布也是从pom里读GAV了。 我记得老版本sbt的依赖项是写在project/SparkBuild.scala里的。这个工具在java/scala项目内很有使用场景。
地址在:https://github.com/sbt/sbt-pom-reader
在/app/hadoop/shengli/spark1.3/project/project/SparkPluginBuild.scala
import sbt._
import sbt.Keys._
/**
* This plugin project is there to define new scala style rules for spark. This is
* a plugin project so that this gets compiled first and is put on the classpath and
* becomes available for scalastyle sbt plugin.
*/
object SparkPluginDef extends Build {
lazy val root = Project("plugins", file(".")) dependsOn(sparkStyle, sbtPomReader)
lazy val sparkStyle = Project("spark-style", file("spark-style"), settings = styleSettings)
lazy val sbtPomReader = uri("https://github.com/ScrapCodes/sbt-pom-reader.git#ignore_artifact_id")
// There is actually no need to publish this artifact.
def styleSettings = Defaults.defaultSettings ++ Seq (
name := "spark-style",
organization := "org.apache.spark",
scalaVersion := "2.10.4",
scalacOptions := Seq("-unchecked", "-deprecation"),
libraryDependencies ++= Dependencies.scalaStyle
)
object Dependencies {
val scalaStyle = Seq("org.scalastyle" %% "scalastyle" % "0.4.0")
}
}
使用ProjectRef
格式:
// This is a heuristic, assuming we‘re running sbt in the same directory as the build.
val buildLocation = (file(".").getAbsoluteFile.getParentFile)
// Here we define a reference to a subproject. The string "subproject" refers to the artifact id of
// the subproject.
val subproject = ProjectRef(buildLoc, "subproject")
// Disable all scalac arguemnts when running the REPL.
scalacOptions in subproject in Compile in console := Seq.empty
在SparkBuild.scala内
...
import sbt._
import com.typesafe.sbt.pom.{loadEffectivePom, PomBuild, SbtPomKeys}
...
private val buildLocation = file(".").getAbsoluteFile.getParentFile
val allProjects@Seq(bagel, catalyst, core, graphx, hive, hiveThriftServer, mllib, repl,
sql, networkCommon, networkShuffle, streaming, streamingFlumeSink, streamingFlume, streamingKafka,
streamingMqtt, streamingTwitter, streamingZeromq) =
Seq("bagel", "catalyst", "core", "graphx", "hive", "hive-thriftserver", "mllib", "repl",
"sql", "network-common", "network-shuffle", "streaming", "streaming-flume-sink",
"streaming-flume", "streaming-kafka", "streaming-mqtt", "streaming-twitter",
"streaming-zeromq").map(ProjectRef(buildLocation, _))
val optionallyEnabledProjects@Seq(yarn, yarnStable, java8Tests, sparkGangliaLgpl,
sparkKinesisAsl) = Seq("yarn", "yarn-stable", "java8-tests", "ganglia-lgpl",
"kinesis-asl").map(ProjectRef(buildLocation, _))
val assemblyProjects@Seq(assembly, examples, networkYarn, streamingKafkaAssembly) =
Seq("assembly", "examples", "network-yarn", "streaming-kafka-assembly")
.map(ProjectRef(buildLocation, _))
...
object SparkBuild extends PomBuild {
...
原创文章,转载请注明出自:http://blog.csdn.net/oopsoom/article/details/45148381
原文地址:http://blog.csdn.net/oopsoom/article/details/45148381