├── .gitignore ├── 3rdparty ├── BUILD ├── jvm │ ├── com │ │ ├── googlecode │ │ │ └── javaewah │ │ │ │ └── BUILD │ │ └── twitter │ │ │ └── BUILD │ └── org │ │ └── scala_lang │ │ └── BUILD └── workspace.bzl ├── README.md ├── WORKSPACE ├── example-bin ├── BUILD └── Bar.scala ├── example-lib ├── BUILD ├── Foo.scala └── test │ └── Test.scala ├── example-maven ├── BUILD └── Maven.scala ├── intellij.bazelproject ├── maven-dependencies.yaml └── tools └── build_rules ├── BUILD └── prelude_bazel /.gitignore: -------------------------------------------------------------------------------- 1 | bazel-* 2 | .ijwb/ -------------------------------------------------------------------------------- /3rdparty/BUILD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avibryant/bazel-scala-example/a3c70a89b72e5e7c0e78a1e388971ce168e4daf0/3rdparty/BUILD -------------------------------------------------------------------------------- /3rdparty/jvm/com/googlecode/javaewah/BUILD: -------------------------------------------------------------------------------- 1 | java_library( 2 | name = "JavaEWAH", 3 | exports = [ 4 | "//external:jar/com/googlecode/javaewah/JavaEWAH" 5 | ], 6 | visibility = [ 7 | "//visibility:public" 8 | ] 9 | ) 10 | 11 | 12 | -------------------------------------------------------------------------------- /3rdparty/jvm/com/twitter/BUILD: -------------------------------------------------------------------------------- 1 | scala_import( 2 | name = "algebird_core", 3 | exports = [ 4 | "//3rdparty/jvm/com/googlecode/javaewah:JavaEWAH", 5 | "//3rdparty/jvm/org/scala_lang:scala_library", 6 | "//3rdparty/jvm/org/scala_lang:scala_reflect" 7 | ], 8 | jars = [ 9 | "//external:jar/com/twitter/algebird_core_2_11" 10 | ], 11 | visibility = [ 12 | "//visibility:public" 13 | ] 14 | ) 15 | 16 | 17 | -------------------------------------------------------------------------------- /3rdparty/jvm/org/scala_lang/BUILD: -------------------------------------------------------------------------------- 1 | java_library( 2 | name = "scala_library", 3 | exports = [ 4 | "//external:jar/org/scala_lang/scala_library" 5 | ], 6 | visibility = [ 7 | "//visibility:public" 8 | ] 9 | ) 10 | 11 | 12 | 13 | java_library( 14 | name = "scala_reflect", 15 | exports = [ 16 | "//external:jar/org/scala_lang/scala_reflect" 17 | ], 18 | visibility = [ 19 | "//visibility:public" 20 | ] 21 | ) 22 | 23 | 24 | -------------------------------------------------------------------------------- /3rdparty/workspace.bzl: -------------------------------------------------------------------------------- 1 | def declare_maven(hash): 2 | native.maven_jar( 3 | name = hash["name"], 4 | artifact = hash["artifact"], 5 | sha1 = hash["sha1"], 6 | repository = hash["repository"] 7 | ) 8 | native.bind( 9 | name = hash["bind"], 10 | actual = hash["actual"] 11 | ) 12 | 13 | def maven_dependencies(callback = declare_maven): 14 | callback({"artifact": "com.googlecode.javaewah:JavaEWAH:0.6.6", "lang": "java", "sha1": "45eb0e27524454a02111136cf4da94476b376d11", "repository": "http://central.maven.org/maven2/", "name": "com_googlecode_javaewah_JavaEWAH", "actual": "@com_googlecode_javaewah_JavaEWAH//jar", "bind": "jar/com/googlecode/javaewah/JavaEWAH"}) 15 | callback({"artifact": "com.twitter:algebird-core_2.11:0.12.1", "lang": "scala", "sha1": "86fa803e493b84157def202de47d2631bb29e46a", "repository": "http://central.maven.org/maven2/", "name": "com_twitter_algebird_core_2_11", "actual": "@com_twitter_algebird_core_2_11//jar:file", "bind": "jar/com/twitter/algebird_core_2_11"}) 16 | callback({"artifact": "org.scala-lang:scala-library:2.11.7", "lang": "java", "sha1": "f75e7acabd57b213d6f61483240286c07213ec0e", "repository": "http://central.maven.org/maven2/", "name": "org_scala_lang_scala_library", "actual": "@org_scala_lang_scala_library//jar", "bind": "jar/org/scala_lang/scala_library"}) 17 | callback({"artifact": "org.scala-lang:scala-reflect:2.11.7", "lang": "java", "sha1": "bf1649c9d33da945dea502180855b56caf06288c", "repository": "http://central.maven.org/maven2/", "name": "org_scala_lang_scala_reflect", "actual": "@org_scala_lang_scala_reflect//jar", "bind": "jar/org/scala_lang/scala_reflect"}) 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | A minimal example of using bazel to build scala, with a library, binary, and tests. 2 | ``` 3 | bazel test example-lib:test 4 | bazel run example-bin 5 | ``` 6 | 7 | Also includes an example of using https://github.com/johnynek/bazel-deps to generate transitive maven dependencies into `3rdparty` from `maven-dependencies.yaml` 8 | 9 | ``` 10 | bazel build example-maven 11 | ``` 12 | 13 | See the bazel-deps README for info on the YAML file format and what to do after modifying it. 14 | -------------------------------------------------------------------------------- /WORKSPACE: -------------------------------------------------------------------------------- 1 | workspace(name = "scala_example") 2 | 3 | load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") 4 | 5 | rules_scala_version="a89d44f7ef67d93dedfc9888630f48d7723516f7" # update this as needed 6 | 7 | http_archive( 8 | name = "io_bazel_rules_scala", 9 | url = "https://github.com/bazelbuild/rules_scala/archive/%s.zip"%rules_scala_version, 10 | type = "zip", 11 | strip_prefix= "rules_scala-%s" % rules_scala_version 12 | ) 13 | 14 | load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories") 15 | scala_repositories() 16 | 17 | # register default scala toolchain 18 | load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") 19 | scala_register_toolchains() 20 | 21 | load("//3rdparty:workspace.bzl", "maven_dependencies") 22 | maven_dependencies() 23 | -------------------------------------------------------------------------------- /example-bin/BUILD: -------------------------------------------------------------------------------- 1 | scala_binary( 2 | name = "example-bin", 3 | srcs = glob(["*.scala"]), 4 | deps = ["//example-lib"], 5 | main_class = "Bar" 6 | ) 7 | -------------------------------------------------------------------------------- /example-bin/Bar.scala: -------------------------------------------------------------------------------- 1 | object Bar { 2 | def main(args: Array[String]){ 3 | println(Foo.message) 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /example-lib/BUILD: -------------------------------------------------------------------------------- 1 | scala_library( 2 | name = "example-lib", 3 | srcs = glob(["*.scala"]), 4 | visibility = ["//visibility:public"] 5 | ) 6 | 7 | scala_test( 8 | name = "test", 9 | srcs = glob(["test/*.scala"]), 10 | deps = ["example-lib"] 11 | ) 12 | -------------------------------------------------------------------------------- /example-lib/Foo.scala: -------------------------------------------------------------------------------- 1 | object Foo { 2 | val message = "hello world" 3 | } 4 | -------------------------------------------------------------------------------- /example-lib/test/Test.scala: -------------------------------------------------------------------------------- 1 | import org.scalatest._ 2 | 3 | class TestSuite extends FlatSpec { 4 | "things" should "work" in { 5 | assert(Foo.message == "hello world") 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /example-maven/BUILD: -------------------------------------------------------------------------------- 1 | scala_library( 2 | name = "example-maven", 3 | srcs = glob(["*.scala"]), 4 | deps = ["//3rdparty/jvm/com/twitter:algebird_core"], 5 | visibility = ["//visibility:public"] 6 | ) 7 | -------------------------------------------------------------------------------- /example-maven/Maven.scala: -------------------------------------------------------------------------------- 1 | import com.twitter.algebird.Semigroup 2 | 3 | object Maven { 4 | val message = Semigroup.plus("hello ", "world") 5 | } 6 | -------------------------------------------------------------------------------- /intellij.bazelproject: -------------------------------------------------------------------------------- 1 | directories: 2 | # Add the directories you want added as source here 3 | # By default, we've added your entire workspace ('.') 4 | . 5 | 6 | targets: 7 | # Add targets that reach the source code that you want to resolve here 8 | # By default, we've added all targets in your workspace 9 | //... 10 | 11 | # also explictly name targets so Run configurations will be generated for them 12 | //example-bin:example-bin 13 | //example-lib:test 14 | 15 | 16 | 17 | additional_languages: 18 | # Uncomment any additional languages you want supported 19 | # android 20 | # dart 21 | # go 22 | # javascript 23 | # kotlin 24 | # scala 25 | # typescript 26 | scala 27 | 28 | test_sources: 29 | example-lib/test/* -------------------------------------------------------------------------------- /maven-dependencies.yaml: -------------------------------------------------------------------------------- 1 | dependencies: 2 | com.twitter: 3 | algebird: 4 | lang: scala 5 | version: 0.12.1 6 | modules: [core] 7 | -------------------------------------------------------------------------------- /tools/build_rules/BUILD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avibryant/bazel-scala-example/a3c70a89b72e5e7c0e78a1e388971ce168e4daf0/tools/build_rules/BUILD -------------------------------------------------------------------------------- /tools/build_rules/prelude_bazel: -------------------------------------------------------------------------------- 1 | load("@io_bazel_rules_scala//scala:scala.bzl", "scala_library", "scala_macro_library","scala_binary", "scala_test") 2 | load("@io_bazel_rules_scala//scala:scala_import.bzl", "scala_import") --------------------------------------------------------------------------------