182 lines
7.3 KiB
Scala
182 lines
7.3 KiB
Scala
/**
|
||
* Copyright (C) 2009-2017 Lightbend Inc. <http://www.lightbend.com>
|
||
*/
|
||
|
||
package akka
|
||
|
||
import java.io.{FileInputStream, InputStreamReader}
|
||
import java.util.Properties
|
||
|
||
import akka.TestExtras.JUnitFileReporting
|
||
import com.typesafe.sbt.pgp.PgpKeys.publishSigned
|
||
import sbt.Keys._
|
||
import sbt.{TestResult, _}
|
||
|
||
object AkkaBuild {
|
||
|
||
val enableMiMa = true
|
||
|
||
val parallelExecutionByDefault = false // TODO: enable this once we're sure it does not break things
|
||
|
||
lazy val buildSettings = Dependencies.Versions ++ Seq(
|
||
organization := "com.typesafe.akka",
|
||
version := "2.5-SNAPSHOT"
|
||
)
|
||
|
||
lazy val rootSettings = parentSettings ++ Release.settings ++
|
||
UnidocRoot.akkaSettings ++
|
||
Protobuf.settings ++ Seq(
|
||
parallelExecution in GlobalScope := System.getProperty("akka.parallelExecution", parallelExecutionByDefault.toString).toBoolean
|
||
)
|
||
|
||
val dontPublishSettings = Seq(
|
||
publishSigned := (),
|
||
publish := (),
|
||
publishArtifact in Compile := false
|
||
)
|
||
|
||
val dontPublishDocsSettings = Seq(
|
||
sources in doc in Compile := List()
|
||
)
|
||
|
||
|
||
lazy val parentSettings = Seq(
|
||
publishArtifact := false
|
||
) ++ dontPublishSettings
|
||
|
||
lazy val mayChangeSettings = Seq(
|
||
description := """|This module of Akka is marked as
|
||
|'may change', which means that it is in early
|
||
|access mode, which also means that it is not covered
|
||
|by commercial support. An module marked 'may change' doesn't
|
||
|have to obey the rule of staying binary compatible
|
||
|between minor releases. Breaking API changes may be
|
||
|introduced in minor releases without notice as we
|
||
|refine and simplify based on your feedback. Additionally
|
||
|such a module may be dropped in major releases
|
||
|without prior deprecation.
|
||
|""".stripMargin
|
||
)
|
||
|
||
val (mavenLocalResolver, mavenLocalResolverSettings) =
|
||
System.getProperty("akka.build.M2Dir") match {
|
||
case null => (Resolver.mavenLocal, Seq.empty)
|
||
case path =>
|
||
// Maven resolver settings
|
||
val resolver = Resolver.file("user-publish-m2-local", new File(path))
|
||
(resolver, Seq(
|
||
otherResolvers := resolver:: publishTo.value.toList,
|
||
publishM2Configuration := Classpaths.publishConfig(packagedArtifacts.value, None, resolverName = resolver.name, checksums = checksums.in(publishM2).value, logging = ivyLoggingLevel.value, overwrite = true)
|
||
))
|
||
}
|
||
|
||
lazy val resolverSettings = {
|
||
// should we be allowed to use artifacts published to the local maven repository
|
||
if(System.getProperty("akka.build.useLocalMavenResolver", "false").toBoolean)
|
||
Seq(resolvers += mavenLocalResolver)
|
||
else Seq.empty
|
||
} ++ {
|
||
// should we be allowed to use artifacts from sonatype snapshots
|
||
if(System.getProperty("akka.build.useSnapshotSonatypeResolver", "false").toBoolean)
|
||
Seq(resolvers += Resolver.sonatypeRepo("snapshots"))
|
||
else Seq.empty
|
||
} ++ Seq(
|
||
pomIncludeRepository := (_ => false) // do not leak internal repositories during staging
|
||
)
|
||
|
||
private def allWarnings: Boolean = System.getProperty("akka.allwarnings", "false").toBoolean
|
||
|
||
lazy val defaultSettings = resolverSettings ++
|
||
TestExtras.Filter.settings ++
|
||
Protobuf.settings ++ Seq(
|
||
// compile options
|
||
scalacOptions in Compile ++= Seq("-encoding", "UTF-8", "-target:jvm-1.8", "-feature", "-unchecked", "-Xlog-reflective-calls", "-Xlint"),
|
||
scalacOptions in Compile ++= (if (allWarnings) Seq("-deprecation") else Nil),
|
||
scalacOptions in Test := (scalacOptions in Test).value.filterNot(opt =>
|
||
opt == "-Xlog-reflective-calls" || opt.contains("genjavadoc")),
|
||
// -XDignore.symbol.file suppresses sun.misc.Unsafe warnings
|
||
javacOptions in compile ++= Seq("-encoding", "UTF-8", "-source", "1.8", "-target", "1.8", "-Xlint:unchecked", "-XDignore.symbol.file"),
|
||
javacOptions in compile ++= (if (allWarnings) Seq("-Xlint:deprecation") else Nil),
|
||
javacOptions in doc ++= Seq(),
|
||
incOptions := incOptions.value.withNameHashing(true),
|
||
|
||
crossVersion := CrossVersion.binary,
|
||
|
||
ivyLoggingLevel in ThisBuild := UpdateLogging.Quiet,
|
||
|
||
licenses := Seq(("Apache License, Version 2.0", url("http://www.apache.org/licenses/LICENSE-2.0"))),
|
||
homepage := Some(url("http://akka.io/")),
|
||
|
||
apiURL := Some(url(s"http://doc.akka.io/api/akka/${version.value}")),
|
||
|
||
initialCommands :=
|
||
"""|import language.postfixOps
|
||
|import akka.actor._
|
||
|import ActorDSL._
|
||
|import scala.concurrent._
|
||
|import com.typesafe.config.ConfigFactory
|
||
|import scala.concurrent.duration._
|
||
|import akka.util.Timeout
|
||
|var config = ConfigFactory.parseString("akka.stdout-loglevel=INFO,akka.loglevel=DEBUG,pinned{type=PinnedDispatcher,executor=thread-pool-executor,throughput=1000}")
|
||
|var remoteConfig = ConfigFactory.parseString("akka.remote.netty{port=0,use-dispatcher-for-io=akka.actor.default-dispatcher,execution-pool-size=0},akka.actor.provider=remote").withFallback(config)
|
||
|var system: ActorSystem = null
|
||
|implicit def _system = system
|
||
|def startSystem(remoting: Boolean = false) { system = ActorSystem("repl", if(remoting) remoteConfig else config); println("don’t forget to system.terminate()!") }
|
||
|implicit def ec = system.dispatcher
|
||
|implicit val timeout = Timeout(5 seconds)
|
||
|""".stripMargin,
|
||
|
||
/**
|
||
* Test settings
|
||
*/
|
||
|
||
parallelExecution in Test := System.getProperty("akka.parallelExecution", parallelExecutionByDefault.toString).toBoolean,
|
||
logBuffered in Test := System.getProperty("akka.logBufferedTests", "false").toBoolean,
|
||
|
||
// show full stack traces and test case durations
|
||
testOptions in Test += Tests.Argument("-oDF"),
|
||
|
||
// don't save test output to a file
|
||
testListeners in (Test, test) := {
|
||
val log = streams.value.log
|
||
Seq(new TestsListener {
|
||
def doInit(): Unit = ()
|
||
def doComplete(finalResult: TestResult.Value): Unit = ()
|
||
def startGroup(name: String): Unit = ()
|
||
def testEvent(event: TestEvent): Unit = ()
|
||
def endGroup(name: String, t: Throwable): Unit = {
|
||
log.trace(t)
|
||
log.error("Could not run test " + name + ": " + t.toString)
|
||
}
|
||
def endGroup(name: String, result: TestResult.Value): Unit = ()
|
||
})
|
||
},
|
||
|
||
// -v Log "test run started" / "test started" / "test run finished" events on log level "info" instead of "debug".
|
||
// -a Show stack traces and exception class name for AssertionErrors.
|
||
testOptions += Tests.Argument(TestFrameworks.JUnit, "-v", "-a")
|
||
) ++
|
||
mavenLocalResolverSettings ++
|
||
JUnitFileReporting.settings ++
|
||
docLintingSettings
|
||
|
||
lazy val docLintingSettings = Seq(
|
||
javacOptions in compile ++= Seq("-Xdoclint:none"),
|
||
javacOptions in test ++= Seq("-Xdoclint:none"),
|
||
javacOptions in doc ++= Seq("-Xdoclint:none")
|
||
)
|
||
|
||
def loadSystemProperties(fileName: String): Unit = {
|
||
import scala.collection.JavaConverters._
|
||
val file = new File(fileName)
|
||
if (file.exists()) {
|
||
println("Loading system properties from file `" + fileName + "`")
|
||
val in = new InputStreamReader(new FileInputStream(file), "UTF-8")
|
||
val props = new Properties
|
||
props.load(in)
|
||
in.close()
|
||
sys.props ++ props.asScala
|
||
}
|
||
}
|
||
|
||
}
|