PageRenderTime 54ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/project/Build.scala

https://github.com/saritseal/summingbird
Scala | 389 lines | 337 code | 42 blank | 10 comment | 10 complexity | 4239694ecb700a9d53d743abd35e6a69 MD5 | raw file
Possible License(s): Apache-2.0
  1. package summingbird
  2. import sbt._
  3. import Keys._
  4. import sbtassembly.Plugin._
  5. import AssemblyKeys._
  6. import com.typesafe.tools.mima.plugin.MimaPlugin.mimaDefaultSettings
  7. import com.typesafe.tools.mima.plugin.MimaKeys.previousArtifact
  8. import scalariform.formatter.preferences._
  9. import com.typesafe.sbt.SbtScalariform._
  10. object SummingbirdBuild extends Build {
  11. def withCross(dep: ModuleID) =
  12. dep cross CrossVersion.binaryMapped {
  13. case "2.9.3" => "2.9.2" // TODO: hack because twitter hasn't built things against 2.9.3
  14. case version if version startsWith "2.10" => "2.10" // TODO: hack because sbt is broken
  15. case x => x
  16. }
  17. def specs2Import(scalaVersion: String) = scalaVersion match {
  18. case version if version startsWith "2.9" => "org.specs2" %% "specs2" % "1.12.4.1" % "test"
  19. case version if version startsWith "2.10" => "org.specs2" %% "specs2" % "1.13" % "test"
  20. }
  21. def isScala210x(scalaVersion: String) = scalaVersion match {
  22. case version if version startsWith "2.9" => false
  23. case version if version startsWith "2.10" => true
  24. }
  25. val extraSettings = Project.defaultSettings ++ mimaDefaultSettings ++ scalariformSettings
  26. val sharedSettings = extraSettings ++ Seq(
  27. organization := "com.twitter",
  28. version := "0.4.2",
  29. scalaVersion := "2.9.3",
  30. crossScalaVersions := Seq("2.9.3", "2.10.4"),
  31. // To support hadoop 1.x
  32. javacOptions ++= Seq("-source", "1.6", "-target", "1.6"),
  33. libraryDependencies ++= Seq(
  34. "junit" % "junit" % "4.11" % "test",
  35. "org.slf4j" % "slf4j-api" % slf4jVersion,
  36. "org.scalacheck" %% "scalacheck" % "1.10.0" % "test",
  37. // These satisify's scaldings log4j needs when in test mode
  38. "log4j" % "log4j" % "1.2.16" % "test",
  39. "org.slf4j" % "slf4j-log4j12" % slf4jVersion % "test"
  40. ),
  41. libraryDependencies <+= scalaVersion(specs2Import(_)),
  42. libraryDependencies += "com.novocode" % "junit-interface" % "0.10" % "test",
  43. resolvers ++= Seq(
  44. Opts.resolver.sonatypeSnapshots,
  45. Opts.resolver.sonatypeReleases,
  46. "Clojars Repository" at "http://clojars.org/repo",
  47. "Conjars Repository" at "http://conjars.org/repo",
  48. "Twitter Maven" at "http://maven.twttr.com"
  49. ),
  50. parallelExecution in Test := true,
  51. scalacOptions ++= Seq(
  52. "-unchecked",
  53. "-deprecation",
  54. "-Yresolve-term-conflict:package"
  55. ),
  56. // Publishing options:
  57. publishMavenStyle := true,
  58. publishArtifact in Test := false,
  59. pomIncludeRepository := { x => false },
  60. publishTo <<= version { v =>
  61. Some(
  62. if (v.trim.toUpperCase.endsWith("SNAPSHOT"))
  63. Opts.resolver.sonatypeSnapshots
  64. else
  65. Opts.resolver.sonatypeStaging
  66. //"twttr" at "http://artifactory.local.twitter.com/libs-releases-local"
  67. )
  68. },
  69. pomExtra := (
  70. <url>https://github.com/twitter/summingbird</url>
  71. <licenses>
  72. <license>
  73. <name>Apache 2</name>
  74. <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
  75. <distribution>repo</distribution>
  76. <comments>A business-friendly OSS license</comments>
  77. </license>
  78. </licenses>
  79. <scm>
  80. <url>git@github.com:twitter/summingbird.git</url>
  81. <connection>scm:git:git@github.com:twitter/summingbird.git</connection>
  82. </scm>
  83. <developers>
  84. <developer>
  85. <id>oscar</id>
  86. <name>Oscar Boykin</name>
  87. <url>http://twitter.com/posco</url>
  88. </developer>
  89. <developer>
  90. <id>sritchie</id>
  91. <name>Sam Ritchie</name>
  92. <url>http://twitter.com/sritchie</url>
  93. </developer>
  94. <developer>
  95. <id>asinghal</id>
  96. <name>Ashutosh Singhal</name>
  97. <url>http://twitter.com/daashu</url>
  98. </developer>
  99. </developers>)
  100. )
  101. lazy val formattingPreferences = {
  102. import scalariform.formatter.preferences._
  103. FormattingPreferences().
  104. setPreference(AlignParameters, false).
  105. setPreference(PreserveSpaceBeforeArguments, true)
  106. }
  107. lazy val summingbird = Project(
  108. id = "summingbird",
  109. base = file("."),
  110. settings = sharedSettings ++ DocGen.publishSettings
  111. ).settings(
  112. test := { },
  113. publish := { }, // skip publishing for this root project.
  114. publishLocal := { }
  115. ).aggregate(
  116. summingbirdCore,
  117. summingbirdCoreJava,
  118. summingbirdBatch,
  119. summingbirdBatchHadoop,
  120. summingbirdOnline,
  121. summingbirdClient,
  122. summingbirdStorm,
  123. summingbirdStormTest,
  124. summingbirdStormJava,
  125. summingbirdScalding,
  126. summingbirdScaldingTest,
  127. summingbirdSpark,
  128. summingbirdBuilder,
  129. summingbirdChill,
  130. summingbirdExample
  131. )
  132. val dfsDatastoresVersion = "1.3.4"
  133. val bijectionVersion = "0.6.2"
  134. val algebirdVersion = "0.6.0"
  135. val scaldingVersion = "0.9.1"
  136. val storehausVersion = "0.9.0"
  137. val utilVersion = "6.3.8"
  138. val chillVersion = "0.3.6"
  139. val tormentaVersion = "0.7.0"
  140. lazy val slf4jVersion = "1.6.6"
  141. /**
  142. * This returns the youngest jar we released that is compatible with
  143. * the current.
  144. */
  145. val unreleasedModules = Set[String]()
  146. def youngestForwardCompatible(subProj: String) =
  147. Some(subProj)
  148. .filterNot(unreleasedModules.contains(_))
  149. .map { s => "com.twitter" % ("summingbird-" + s + "_2.9.3") % "0.4.2" }
  150. def module(name: String) = {
  151. val id = "summingbird-%s".format(name)
  152. Project(id = id, base = file(id), settings = sharedSettings ++ Seq(
  153. Keys.name := id,
  154. previousArtifact := youngestForwardCompatible(name))
  155. )
  156. }
  157. lazy val summingbirdBatch = module("batch").settings(
  158. libraryDependencies ++= Seq(
  159. "com.twitter" %% "algebird-core" % algebirdVersion,
  160. "com.twitter" %% "bijection-core" % bijectionVersion,
  161. "com.twitter" %% "scalding-date" % scaldingVersion
  162. )
  163. )
  164. lazy val summingbirdChill = module("chill").settings(
  165. libraryDependencies ++= Seq(
  166. "com.twitter" %% "chill" % chillVersion,
  167. "com.twitter" %% "chill-bijection" % chillVersion
  168. )
  169. ).dependsOn(
  170. summingbirdCore,
  171. summingbirdBatch
  172. )
  173. lazy val summingbirdClient = module("client").settings(
  174. libraryDependencies ++= Seq(
  175. "com.twitter" %% "algebird-core" % algebirdVersion,
  176. "com.twitter" %% "algebird-util" % algebirdVersion,
  177. "com.twitter" %% "bijection-core" % bijectionVersion,
  178. "com.twitter" %% "storehaus-core" % storehausVersion,
  179. "com.twitter" %% "storehaus-algebra" % storehausVersion
  180. )
  181. ).dependsOn(summingbirdBatch)
  182. lazy val summingbirdCore = module("core").settings(
  183. libraryDependencies += "com.twitter" %% "algebird-core" % algebirdVersion
  184. )
  185. lazy val summingbirdCoreJava = module("core-java").dependsOn(
  186. summingbirdCore % "test->test;compile->compile"
  187. )
  188. lazy val summingbirdOnline = module("online").settings(
  189. libraryDependencies ++= Seq(
  190. "com.twitter" %% "algebird-core" % algebirdVersion,
  191. "com.twitter" %% "algebird-util" % algebirdVersion,
  192. "com.twitter" %% "bijection-core" % bijectionVersion,
  193. "com.twitter" %% "storehaus-core" % storehausVersion,
  194. "com.twitter" %% "chill" % chillVersion,
  195. "com.twitter" %% "storehaus-algebra" % storehausVersion,
  196. withCross("com.twitter" %% "util-core" % utilVersion)
  197. )
  198. ).dependsOn(
  199. summingbirdCore % "test->test;compile->compile"
  200. )
  201. lazy val summingbirdStorm = module("storm").settings(
  202. parallelExecution in Test := false,
  203. libraryDependencies ++= Seq(
  204. "com.twitter" %% "algebird-core" % algebirdVersion,
  205. "com.twitter" %% "bijection-core" % bijectionVersion,
  206. "com.twitter" %% "chill" % chillVersion,
  207. "com.twitter" % "chill-storm" % chillVersion,
  208. "com.twitter" %% "chill-bijection" % chillVersion,
  209. "com.twitter" %% "storehaus-core" % storehausVersion,
  210. "com.twitter" %% "storehaus-algebra" % storehausVersion,
  211. "com.twitter" %% "scalding-args" % scaldingVersion,
  212. "com.twitter" %% "tormenta-core" % tormentaVersion,
  213. withCross("com.twitter" %% "util-core" % utilVersion),
  214. "storm" % "storm" % "0.9.0-wip15" % "provided"
  215. )
  216. ).dependsOn(
  217. summingbirdCore % "test->test;compile->compile",
  218. summingbirdOnline,
  219. summingbirdChill,
  220. summingbirdBatch
  221. )
  222. lazy val summingbirdStormTest = module("storm-test").settings(
  223. parallelExecution in Test := false,
  224. libraryDependencies ++= Seq(
  225. "com.twitter" %% "algebird-core" % algebirdVersion,
  226. "com.twitter" %% "bijection-core" % bijectionVersion,
  227. "com.twitter" %% "storehaus-core" % storehausVersion,
  228. "com.twitter" %% "storehaus-algebra" % storehausVersion,
  229. "com.twitter" %% "tormenta-core" % tormentaVersion,
  230. withCross("com.twitter" %% "util-core" % utilVersion),
  231. "storm" % "storm" % "0.9.0-wip15" % "provided"
  232. )
  233. ).dependsOn(
  234. summingbirdCore % "test->test;compile->compile",
  235. summingbirdStorm
  236. )
  237. lazy val summingbirdStormJava = module("storm-java").settings(
  238. libraryDependencies ++= Seq(
  239. "storm" % "storm" % "0.9.0-wip15" % "provided"
  240. )
  241. ).dependsOn(
  242. summingbirdCore % "test->test;compile->compile",
  243. summingbirdCoreJava % "test->test;compile->compile",
  244. summingbirdStorm % "test->test;compile->compile"
  245. )
  246. lazy val summingbirdScalding = module("scalding").settings(
  247. libraryDependencies ++= Seq(
  248. "com.backtype" % "dfs-datastores" % dfsDatastoresVersion,
  249. "com.backtype" % "dfs-datastores-cascading" % dfsDatastoresVersion,
  250. "com.twitter" %% "algebird-core" % algebirdVersion,
  251. "com.twitter" %% "algebird-util" % algebirdVersion,
  252. "com.twitter" %% "algebird-bijection" % algebirdVersion,
  253. "com.twitter" %% "bijection-json" % bijectionVersion,
  254. "com.twitter" %% "chill" % chillVersion,
  255. "com.twitter" % "chill-hadoop" % chillVersion,
  256. "com.twitter" %% "chill-bijection" % chillVersion,
  257. "commons-lang" % "commons-lang" % "2.6",
  258. "com.twitter" %% "scalding-core" % scaldingVersion,
  259. "com.twitter" %% "scalding-commons" % scaldingVersion
  260. )
  261. ).dependsOn(
  262. summingbirdCore % "test->test;compile->compile",
  263. summingbirdChill,
  264. summingbirdBatchHadoop,
  265. summingbirdBatch
  266. )
  267. lazy val summingbirdScaldingTest = module("scalding-test").settings(
  268. libraryDependencies ++= Seq(
  269. "org.scalacheck" %% "scalacheck" % "1.10.0"
  270. )
  271. ).dependsOn(
  272. summingbirdCore % "test->test;compile->compile",
  273. summingbirdChill,
  274. summingbirdBatchHadoop,
  275. summingbirdScalding
  276. )
  277. lazy val summingbirdBatchHadoop = module("batch-hadoop").settings(
  278. libraryDependencies ++= Seq(
  279. "com.backtype" % "dfs-datastores" % dfsDatastoresVersion,
  280. "com.twitter" %% "algebird-core" % algebirdVersion,
  281. "com.twitter" %% "bijection-json" % bijectionVersion,
  282. "com.twitter" %% "scalding-date" % scaldingVersion
  283. )
  284. ).dependsOn(
  285. summingbirdCore % "test->test;compile->compile",
  286. summingbirdBatch
  287. )
  288. lazy val summingbirdBuilder = module("builder").settings(
  289. libraryDependencies ++= Seq(
  290. "storm" % "storm" % "0.9.0-wip15" % "provided"
  291. )
  292. ).dependsOn(
  293. summingbirdCore,
  294. summingbirdStorm,
  295. summingbirdScalding
  296. )
  297. lazy val summingbirdExample = module("example").settings(
  298. libraryDependencies ++= Seq(
  299. "log4j" % "log4j" % "1.2.16",
  300. "org.slf4j" % "slf4j-log4j12" % slf4jVersion,
  301. "storm" % "storm" % "0.9.0-wip15" exclude("org.slf4j", "log4j-over-slf4j") exclude("ch.qos.logback", "logback-classic"),
  302. "com.twitter" %% "bijection-netty" % bijectionVersion,
  303. "com.twitter" %% "tormenta-twitter" % tormentaVersion,
  304. "com.twitter" %% "storehaus-memcache" % storehausVersion
  305. )
  306. ).dependsOn(summingbirdCore, summingbirdCoreJava, summingbirdStorm, summingbirdStormJava)
  307. lazy val sparkAssemblyMergeSettings = assemblySettings :+ {
  308. mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
  309. {
  310. //case PathList("org", "w3c", xs @ _*) => MergeStrategy.first
  311. //case "about.html" => MergeStrategy.discard
  312. case PathList("com", "esotericsoftware", "minlog", xs @ _*) => MergeStrategy.first
  313. case PathList("org", "apache", "commons", "beanutils", xs @ _*) => MergeStrategy.first
  314. case PathList("org", "apache", "commons", "collections", xs @ _*) => MergeStrategy.first
  315. case PathList("org", "apache", "jasper", xs @ _*) => MergeStrategy.first
  316. case "log4j.properties" => MergeStrategy.concat
  317. case x if x.endsWith(".xsd") || x.endsWith(".dtd") => MergeStrategy.first
  318. case x => old(x)
  319. }
  320. }
  321. }
  322. val sparkDeps = Seq(
  323. "com.twitter" %% "algebird-core" % algebirdVersion,
  324. "com.twitter" %% "algebird-util" % algebirdVersion,
  325. "com.twitter" %% "algebird-bijection" % algebirdVersion,
  326. "com.twitter" %% "bijection-json" % bijectionVersion,
  327. "com.twitter" %% "chill" % chillVersion,
  328. "com.twitter" % "chill-hadoop" % chillVersion,
  329. "com.twitter" %% "chill-bijection" % chillVersion,
  330. "commons-lang" % "commons-lang" % "2.6",
  331. "commons-httpclient" % "commons-httpclient" % "3.1",
  332. "org.apache.spark" %% "spark-core" % "0.9.0-incubating" % "provided"
  333. )
  334. def buildSparkDeps(scalaVersion: String) = if (isScala210x(scalaVersion)) sparkDeps else Seq()
  335. lazy val summingbirdSpark = module("spark").settings(
  336. resolvers += "Typesafe Repo" at "http://repo.typesafe.com/typesafe/releases/",
  337. skip in compile := !isScala210x(scalaVersion.value),
  338. skip in test := !isScala210x(scalaVersion.value),
  339. publishArtifact := isScala210x(scalaVersion.value),
  340. libraryDependencies ++= buildSparkDeps(scalaVersion.value)
  341. )
  342. .settings(sparkAssemblyMergeSettings:_*)
  343. .dependsOn(
  344. summingbirdCore % "test->test;compile->compile",
  345. summingbirdChill
  346. )
  347. }