aboutsummaryrefslogtreecommitdiff
path: root/build.sbt
blob: 5bd86895f9a5f6c79fff651f36baf9bbccccca51 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import scala.xml.Node
import scala.xml.transform.{RewriteRule, RuleTransformer}

/* =========================================================================================
 * Copyright © 2013-2018 the kamon project <http://kamon.io/>
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the
 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific language governing permissions
 * and limitations under the License.
 * =========================================================================================
 */


lazy val kamon = (project in file("."))
  .settings(moduleName := "kamon")
  .settings(noPublishing: _*)
  .aggregate(core, testkit, coreTests, coreBench)

val commonSettings = Seq(
  scalaVersion := "2.12.6",
  javacOptions += "-XDignore.symbol.file",
  resolvers += Resolver.mavenLocal,
  crossScalaVersions := Seq("2.12.6", "2.11.8", "2.10.6"),
  concurrentRestrictions in Global += Tags.limit(Tags.Test, 1),
  scalacOptions ++= Seq(
    "-deprecation",
    "-encoding", "UTF-8",
    "-feature",
    "-Xfuture",
    "-language:implicitConversions", "-language:higherKinds", "-language:existentials", "-language:postfixOps",
    "-unchecked"
  ) ++ (CrossVersion.partialVersion(scalaVersion.value) match {
    case Some((2,10)) => Seq("-Yno-generic-signatures", "-target:jvm-1.7")
    case Some((2,11)) => Seq("-Ybackend:GenBCode","-Ydelambdafy:method","-target:jvm-1.8")
    case Some((2,12)) => Seq("-opt:l:method")
    case _ => Seq.empty
  })
)

lazy val core = (project in file("kamon-core"))
  .enablePlugins(BuildInfoPlugin)
  .enablePlugins(AssemblyPlugin)
  .settings(commonSettings: _*)
  .settings(moduleName := "kamon-core")
  .settings(
    buildInfoKeys := Seq[BuildInfoKey](version),
    buildInfoPackage := "kamon.status",
    libraryDependencies ++= Seq(
      "com.typesafe"     %  "config"              % "1.3.1",
      "org.hdrhistogram" %  "HdrHistogram"        % "2.1.9",
      "org.jctools"      %  "jctools-core"        % "2.1.1",
      "org.nanohttpd"    %  "nanohttpd"           % "2.3.1",
      "com.grack"        %  "nanojson"            % "1.1",
      "org.slf4j"        %  "slf4j-api"           % "1.7.25"
    ),
    assembleArtifact in assemblyPackageScala := false,
    assemblyShadeRules in assembly := Seq(
      ShadeRule.rename("org.HdrHistogram.**"    -> "kamon.lib.@0").inAll,
      ShadeRule.rename("com.grack.nanojson.**"  -> "kamon.lib.@0").inAll,
      ShadeRule.rename("org.jctools.**"         -> "kamon.lib.@0").inAll,
      ShadeRule.rename("fi.iki.elonen.**"       -> "kamon.lib.@0").inAll,
    ),
    assemblyExcludedJars in assembly := {
      val cp = (fullClasspath in assembly).value
      val excludedPackages = Seq("slf4j-api","config")
      cp filter { file => excludedPackages.exists(file.data.getName.startsWith(_))}
    },
    packageBin in Compile := assembly.value,
    assemblyJarName in assembly := s"${moduleName.value}_${scalaBinaryVersion.value}-${version.value}.jar",
    pomPostProcess := { originalPom => {
      val shadedGroups = Seq("org.hdrhistogram", "org.jctools", "org.nanohttpd", "com.grack")
      val filterShadedDependencies = new RuleTransformer(new RewriteRule {
        override def transform(n: Node): Seq[Node] = {
          if(n.label == "dependency") {
            val group = (n \ "groupId").text
            if (shadedGroups.find(eo => eo.equalsIgnoreCase(group)).nonEmpty) Seq.empty else n
          } else n
        }
      })

      filterShadedDependencies(originalPom)
    }}

  )

lazy val testkit = (project in file("kamon-testkit"))
  .settings(moduleName := "kamon-testkit")
  .settings(commonSettings: _*)
  .settings(
    libraryDependencies ++= Seq(
      "org.scalatest" %% "scalatest" % "3.0.1"
    )
  ).dependsOn(core)


lazy val coreTests = (project in file("kamon-core-tests"))
  .settings(
    moduleName := "kamon-core-tests",
    resolvers += Resolver.mavenLocal,
    fork in Test := true)
  .settings(noPublishing: _*)
  .settings(commonSettings: _*)
  .settings(
    libraryDependencies ++= Seq(
      "org.scalatest" %% "scalatest" % "3.0.1" % "test",
      "ch.qos.logback" % "logback-classic" % "1.2.3" % "test"
    )
  ).dependsOn(testkit)


lazy val coreBench = (project in file("kamon-core-bench"))
  .enablePlugins(JmhPlugin)
  .settings(
    moduleName := "kamon-core-bench",
    fork in Test := true)
  .settings(noPublishing: _*)
  .settings(commonSettings: _*)
  .dependsOn(core)