diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala
index 5eed0ab52b..42cd8a446f 100644
--- a/project/AkkaBuild.scala
+++ b/project/AkkaBuild.scala
@@ -3,14 +3,16 @@ import Keys._
import MultiJvmPlugin.{ MultiJvm, extraOptions, multiJvmMarker }
object AkkaBuild extends Build {
- val Organization = "se.scalablesolutions.akka"
- val Version = "2.0-SNAPSHOT"
- val ScalaVersion = "2.9.0-1"
+ lazy val buildSettings = Seq(
+ organization := "se.scalablesolutions.akka",
+ version := "2.0-SNAPSHOT",
+ scalaVersion := "2.9.0-1"
+ )
lazy val akka = Project(
id = "akka",
base = file("."),
- settings = buildSettings ++ Unidoc.settings ++ rstdocSettings ++ Seq(
+ settings = parentSettings ++ Unidoc.settings ++ rstdocSettings ++ Seq(
Unidoc.unidocExclude := Seq(samples.id, tutorials.id),
rstdocDirectory <<= baseDirectory / "akka-docs"
),
@@ -22,7 +24,7 @@ object AkkaBuild extends Build {
base = file("akka-actor"),
settings = defaultSettings ++ Seq(
autoCompilerPlugins := true,
- addCompilerPlugin("org.scala-lang.plugins" % "continuations" % ScalaVersion),
+ libraryDependencies <+= scalaVersion { v => compilerPlugin("org.scala-lang.plugins" % "continuations" % v) },
scalacOptions += "-P:continuations:enable"
)
)
@@ -42,7 +44,7 @@ object AkkaBuild extends Build {
dependencies = Seq(testkit),
settings = defaultSettings ++ Seq(
autoCompilerPlugins := true,
- addCompilerPlugin("org.scala-lang.plugins" % "continuations" % ScalaVersion),
+ libraryDependencies <+= scalaVersion { v => compilerPlugin("org.scala-lang.plugins" % "continuations" % v) },
scalacOptions += "-P:continuations:enable",
libraryDependencies ++= Dependencies.actorTests
)
@@ -93,7 +95,7 @@ object AkkaBuild extends Build {
lazy val mailboxes = Project(
id = "akka-durable-mailboxes",
base = file("akka-durable-mailboxes"),
- settings = buildSettings,
+ settings = parentSettings,
aggregate = Seq(mailboxesCommon, beanstalkMailbox, fileMailbox, redisMailbox, zookeeperMailbox)
)
@@ -184,7 +186,7 @@ object AkkaBuild extends Build {
lazy val samples = Project(
id = "akka-samples",
base = file("akka-samples"),
- settings = buildSettings,
+ settings = parentSettings,
aggregate = Seq(fsmSample)
)
@@ -226,7 +228,7 @@ object AkkaBuild extends Build {
lazy val tutorials = Project(
id = "akka-tutorials",
base = file("akka-tutorials"),
- settings = buildSettings,
+ settings = parentSettings,
aggregate = Seq(firstTutorial, secondTutorial)
)
@@ -246,14 +248,15 @@ object AkkaBuild extends Build {
// Settings
- lazy val buildSettings = Defaults.defaultSettings ++ Seq(
- organization := Organization,
- version := Version,
- scalaVersion := ScalaVersion,
- crossPaths := false
+ override lazy val settings = super.settings ++ buildSettings ++ Publish.versionSettings
+
+ lazy val baseSettings = Defaults.defaultSettings ++ Publish.settings
+
+ lazy val parentSettings = baseSettings ++ Seq(
+ publishArtifact in Compile := false
)
- lazy val defaultSettings = buildSettings ++ Seq(
+ lazy val defaultSettings = baseSettings ++ Seq(
resolvers += "Typesafe Repo" at "http://repo.typesafe.com/typesafe/releases/",
// compile options
diff --git a/project/Publish.scala b/project/Publish.scala
new file mode 100644
index 0000000000..a0add06443
--- /dev/null
+++ b/project/Publish.scala
@@ -0,0 +1,69 @@
+import sbt._
+import Keys._
+import java.io.File
+
+object Publish {
+ final val Snapshot = "-SNAPSHOT"
+
+ lazy val settings = Seq(
+ crossPaths := false,
+ pomExtra := akkaPomExtra,
+ publishTo := akkaPublishTo,
+ credentials ++= akkaCredentials
+ )
+
+ lazy val versionSettings = Seq(
+ commands += stampVersion
+ )
+
+ def akkaPomExtra = {
+ 2009
+ http://akka.io
+
+ Scalable Solutions AB
+ http://scalablesolutions.se
+
+
+
+ Apache 2
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+ repo
+
+
+ }
+
+ def akkaPublishTo: Option[Resolver] = {
+ val property = Option(System.getProperty("akka.publish.repository"))
+ val repo = property map { "Akka Publish Repository" at _ }
+ val m2repo = Path.userHome / ".m2" /"repository"
+ repo orElse Some(Resolver.file("Local Maven Repository", m2repo))
+ }
+
+ def akkaCredentials: Seq[Credentials] = {
+ val property = Option(System.getProperty("akka.publish.credentials"))
+ property map (f => Credentials(new File(f))) toSeq
+ }
+
+ def stampVersion = Command.command("stamp-version") { state =>
+ append((version in ThisBuild ~= stamp) :: Nil, state)
+ }
+
+ // TODO: replace with extracted.append when updated to sbt 0.10.1
+ def append(settings: Seq[Setting[_]], state: State): State = {
+ val extracted = Project.extract(state)
+ import extracted._
+ val append = Load.transformSettings(Load.projectScope(currentRef), currentRef.build, rootProject, settings)
+ val newStructure = Load.reapply(session.original ++ append, structure)
+ Project.setProject(session, newStructure, state)
+ }
+
+ def stamp(version: String): String = {
+ if (version endsWith Snapshot) (version stripSuffix Snapshot) + "-" + timestamp(System.currentTimeMillis)
+ else version
+ }
+
+ def timestamp(time: Long): String = {
+ val format = new java.text.SimpleDateFormat("yyyyMMdd-HHmmss")
+ format.format(new java.util.Date(time))
+ }
+}