Submit Search
Upload
Building Scala with Bazel - Scala Days
•
0 likes
•
516 views
N
Natan Silnitsky
Follow
See How Bazel can dramatically improve Scala build times for your growing code base
Read less
Read more
Technology
Report
Share
Report
Share
1 of 56
Download now
Download to read offline
Recommended
Building Large Java Codebase with Bazel - CodeOne
Building Large Java Codebase with Bazel - CodeOne
Natan Silnitsky
Bazel basic terminology (For Maven users)
Bazel basic terminology (For Maven users)
Natan Silnitsky
Introduzione DevOps con Ansible
Introduzione DevOps con Ansible
Matteo Magni
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Petrozzi Emilio
La mia prima lezione di pozioni
La mia prima lezione di pozioni
Gianluca Padovani
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Giorgio Cefaro
Async navigation with a lightweight ES6 framework
Async navigation with a lightweight ES6 framework
sparkfabrik
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP e Symfony 2
Giorgio Cefaro
Recommended
Building Large Java Codebase with Bazel - CodeOne
Building Large Java Codebase with Bazel - CodeOne
Natan Silnitsky
Bazel basic terminology (For Maven users)
Bazel basic terminology (For Maven users)
Natan Silnitsky
Introduzione DevOps con Ansible
Introduzione DevOps con Ansible
Matteo Magni
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Deploy Heroku-style di un child theme WordPress su VPS via GIT
Petrozzi Emilio
La mia prima lezione di pozioni
La mia prima lezione di pozioni
Gianluca Padovani
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Giorgio Cefaro
Async navigation with a lightweight ES6 framework
Async navigation with a lightweight ES6 framework
sparkfabrik
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP e Symfony 2
Giorgio Cefaro
Dominare il codice legacy
Dominare il codice legacy
Tommaso Torti
Applicazioni native in java
Applicazioni native in java
Federico Paparoni
Panoramica su Ant
Panoramica su Ant
bobpuley
FANTIN BIG DATA (2)
FANTIN BIG DATA (2)
fantin stefano
Drupal come framework di sviluppo
Drupal come framework di sviluppo
GrUSP
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Codemotion
Perl Template Toolkit
Perl Template Toolkit
Stefano Rodighiero
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
Stefano Dindo
Amazon S3 in Perl
Amazon S3 in Perl
Flavio Poletti
Laboratorio Di Basi Di Dati 03 Il D B M S Postgre S Q L
Laboratorio Di Basi Di Dati 03 Il D B M S Postgre S Q L
guestbe916c
Sistemi di Build Alternativi
Sistemi di Build Alternativi
Dario Bertini
Lezione Android prima parte
Lezione Android prima parte
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Codemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazione
Gabriele Guizzardi
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
Giuseppe Dell'Abate
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
lordarthas
Laboratorio Di Basi Di Dati 08 Il Web Server Apache
Laboratorio Di Basi Di Dati 08 Il Web Server Apache
guestbe916c
Reactive programming principles
Reactive programming principles
Riccardo Cardin
Php mysql3
Php mysql3
orestJump
DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8
DrupalDay
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Codemotion
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Natan Silnitsky
Workflow Engines & Event Streaming Brokers - Can they work together? [Current...
Workflow Engines & Event Streaming Brokers - Can they work together? [Current...
Natan Silnitsky
More Related Content
Similar to Building Scala with Bazel - Scala Days
Dominare il codice legacy
Dominare il codice legacy
Tommaso Torti
Applicazioni native in java
Applicazioni native in java
Federico Paparoni
Panoramica su Ant
Panoramica su Ant
bobpuley
FANTIN BIG DATA (2)
FANTIN BIG DATA (2)
fantin stefano
Drupal come framework di sviluppo
Drupal come framework di sviluppo
GrUSP
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Codemotion
Perl Template Toolkit
Perl Template Toolkit
Stefano Rodighiero
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
Stefano Dindo
Amazon S3 in Perl
Amazon S3 in Perl
Flavio Poletti
Laboratorio Di Basi Di Dati 03 Il D B M S Postgre S Q L
Laboratorio Di Basi Di Dati 03 Il D B M S Postgre S Q L
guestbe916c
Sistemi di Build Alternativi
Sistemi di Build Alternativi
Dario Bertini
Lezione Android prima parte
Lezione Android prima parte
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Codemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazione
Gabriele Guizzardi
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
Giuseppe Dell'Abate
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
lordarthas
Laboratorio Di Basi Di Dati 08 Il Web Server Apache
Laboratorio Di Basi Di Dati 08 Il Web Server Apache
guestbe916c
Reactive programming principles
Reactive programming principles
Riccardo Cardin
Php mysql3
Php mysql3
orestJump
DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8
DrupalDay
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Codemotion
Similar to Building Scala with Bazel - Scala Days
(20)
Dominare il codice legacy
Dominare il codice legacy
Applicazioni native in java
Applicazioni native in java
Panoramica su Ant
Panoramica su Ant
FANTIN BIG DATA (2)
FANTIN BIG DATA (2)
Drupal come framework di sviluppo
Drupal come framework di sviluppo
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Perl Template Toolkit
Perl Template Toolkit
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
Amazon S3 in Perl
Amazon S3 in Perl
Laboratorio Di Basi Di Dati 03 Il D B M S Postgre S Q L
Laboratorio Di Basi Di Dati 03 Il D B M S Postgre S Q L
Sistemi di Build Alternativi
Sistemi di Build Alternativi
Lezione Android prima parte
Lezione Android prima parte
Codemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazione
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
Laboratorio Di Basi Di Dati 08 Il Web Server Apache
Laboratorio Di Basi Di Dati 08 Il Web Server Apache
Reactive programming principles
Reactive programming principles
Php mysql3
Php mysql3
DDAY2014 - Performance in Drupal 8
DDAY2014 - Performance in Drupal 8
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
More from Natan Silnitsky
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Natan Silnitsky
Workflow Engines & Event Streaming Brokers - Can they work together? [Current...
Workflow Engines & Event Streaming Brokers - Can they work together? [Current...
Natan Silnitsky
DevSum - Lessons Learned from 2000 microservices
DevSum - Lessons Learned from 2000 microservices
Natan Silnitsky
GeeCon - Lessons Learned from 2000 microservices
GeeCon - Lessons Learned from 2000 microservices
Natan Silnitsky
Migrating to Multi Cluster Managed Kafka - ApacheKafkaIL
Migrating to Multi Cluster Managed Kafka - ApacheKafkaIL
Natan Silnitsky
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
Natan Silnitsky
BuildStuff - Lessons Learned from 2000 Event Driven Microservices
BuildStuff - Lessons Learned from 2000 Event Driven Microservices
Natan Silnitsky
Lessons Learned from 2000 Event Driven Microservices - Reversim
Lessons Learned from 2000 Event Driven Microservices - Reversim
Natan Silnitsky
Devoxx Ukraine - Kafka based Global Data Mesh
Devoxx Ukraine - Kafka based Global Data Mesh
Natan Silnitsky
Devoxx UK - Migrating to Multi Cluster Managed Kafka
Devoxx UK - Migrating to Multi Cluster Managed Kafka
Natan Silnitsky
Dev Days Europe - Kafka based Global Data Mesh at Wix
Dev Days Europe - Kafka based Global Data Mesh at Wix
Natan Silnitsky
Kafka Summit London - Kafka based Global Data Mesh at Wix
Kafka Summit London - Kafka based Global Data Mesh at Wix
Natan Silnitsky
Migrating to Multi Cluster Managed Kafka - Conf42 - CloudNative
Migrating to Multi Cluster Managed Kafka - Conf42 - CloudNative
Natan Silnitsky
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
Natan Silnitsky
Migrating to Multi Cluster Managed Kafka - DevopStars 2022
Migrating to Multi Cluster Managed Kafka - DevopStars 2022
Natan Silnitsky
Open sourcing a successful internal project - Reversim 2021
Open sourcing a successful internal project - Reversim 2021
Natan Silnitsky
How to successfully manage a ZIO fiber’s lifecycle - Functional Scala 2021
How to successfully manage a ZIO fiber’s lifecycle - Functional Scala 2021
Natan Silnitsky
Advanced Caching Patterns used by 2000 microservices - Code Motion
Advanced Caching Patterns used by 2000 microservices - Code Motion
Natan Silnitsky
Advanced Caching Patterns used by 2000 microservices - Devoxx Ukraine
Advanced Caching Patterns used by 2000 microservices - Devoxx Ukraine
Natan Silnitsky
Advanced Microservices Caching Patterns - Devoxx UK
Advanced Microservices Caching Patterns - Devoxx UK
Natan Silnitsky
More from Natan Silnitsky
(20)
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Workflow Engines & Event Streaming Brokers - Can they work together? [Current...
Workflow Engines & Event Streaming Brokers - Can they work together? [Current...
DevSum - Lessons Learned from 2000 microservices
DevSum - Lessons Learned from 2000 microservices
GeeCon - Lessons Learned from 2000 microservices
GeeCon - Lessons Learned from 2000 microservices
Migrating to Multi Cluster Managed Kafka - ApacheKafkaIL
Migrating to Multi Cluster Managed Kafka - ApacheKafkaIL
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
BuildStuff - Lessons Learned from 2000 Event Driven Microservices
BuildStuff - Lessons Learned from 2000 Event Driven Microservices
Lessons Learned from 2000 Event Driven Microservices - Reversim
Lessons Learned from 2000 Event Driven Microservices - Reversim
Devoxx Ukraine - Kafka based Global Data Mesh
Devoxx Ukraine - Kafka based Global Data Mesh
Devoxx UK - Migrating to Multi Cluster Managed Kafka
Devoxx UK - Migrating to Multi Cluster Managed Kafka
Dev Days Europe - Kafka based Global Data Mesh at Wix
Dev Days Europe - Kafka based Global Data Mesh at Wix
Kafka Summit London - Kafka based Global Data Mesh at Wix
Kafka Summit London - Kafka based Global Data Mesh at Wix
Migrating to Multi Cluster Managed Kafka - Conf42 - CloudNative
Migrating to Multi Cluster Managed Kafka - Conf42 - CloudNative
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
Migrating to Multi Cluster Managed Kafka - DevopStars 2022
Migrating to Multi Cluster Managed Kafka - DevopStars 2022
Open sourcing a successful internal project - Reversim 2021
Open sourcing a successful internal project - Reversim 2021
How to successfully manage a ZIO fiber’s lifecycle - Functional Scala 2021
How to successfully manage a ZIO fiber’s lifecycle - Functional Scala 2021
Advanced Caching Patterns used by 2000 microservices - Code Motion
Advanced Caching Patterns used by 2000 microservices - Code Motion
Advanced Caching Patterns used by 2000 microservices - Devoxx Ukraine
Advanced Caching Patterns used by 2000 microservices - Devoxx Ukraine
Advanced Microservices Caching Patterns - Devoxx UK
Advanced Microservices Caching Patterns - Devoxx UK
Building Scala with Bazel - Scala Days
1.
2.
avg build time (minutes)
3.
4.
Infra change
5.
6.
Infra change
7.
8.
scala_project ├── WORKSPACE └── src └──
main └── scala └── com ├── example │ ├── A.scala │ ├── B.scala │ └── C.scala └── example2 ├── D.scala ├── E.scala └── F.scala
9.
scala_project ├── WORKSPACE └── src └──
main └── scala └── com ├── example │ ├── A.scala │ ├── B.scala │ ├── BUILD │ └── C.scala └── example2 ├── D.scala ├── E.scala └── F.scala
10.
f(A,B,C)f( ) Source files env’
variables dependencies A B C wix
11.
scala_project ├── WORKSPACE └── src ├──
main │ └── scala │ └── com │ └── example │ ├── A.scala │ ├── B.scala │ ├── BUILD FILE │ ├── C.scala │ └── Example.scala └── test A.scala -> scala_library -> a.jar scala_library( name="a", srcs=[ "A.scala", ], deps = [":c"]) $ bazel build :a
12.
f(A,B,C)f( ) A B C
13.
A B C f( ) f(A,B,C)
14.
f(A,B,C) f( ) A B C f(A,B,C) f( ) A B C
15.
16.
17.
Compilation Test RunPending
18.
✔ ✔ ✔ ✔
✔ ✔ ✔ ✔ ✔ ✔
19.
✔ ✔ ✔ ✔
✔ ✔ ✔ ✔ ✔ ✔ CI/local tradeoff
20.
21.
22.
23.
24.
25.
out of the
box
26.
scala_project ├── build.sbt /
build.gradle / pom.xml └── src ├── main ├── test
27.
scala_project ├── WORKSPACE └── src ├──
main │ └── scala │ └── com │ └── example │ ├── A.scala │ ├── B.scala │ ├── BUILD FILE │ ├── C.scala │ └── Example.scala └── test scala_project ├── build.sbt / build.gradle / pom.xml └── src ├── main ├── test
28.
29.
scala_project ├── WORKSPACE └── src ├──
main │ └── scala │ └── com │ └── example │ ├── A.scala │ ├── B.scala │ ├── BUILD FILE │ ├── C.scala │ └── Example.scala └── test A.scala -> scala_library -> a.jar scala_library( name="a", srcs=[ "A.scala", ], deps = [":c"]) $ bazel build :a
30.
31.
scala_project ├── WORKSPACE └── src ├──
main │ └── scala │ └── com │ └── example │ ├── A.scala │ ├── B.scala │ ├── BUILD FILE │ ├── C.scala │ └── Example.scala └── test B.scala -> scala_binary -> B.jar + app_runner.sh scala_binary( name="b", srcs=[ "B.scala", ], main_class="com.example.Foo") $ bazel run :b
32.
33.
ExampleTest.scala -> scala_test
-> example_test.jar + test_runner.sh scala_test( name="example_test", srcs=glob(["*Test.scala"])) $ bazel test :example_test scala_project ├── WORKSPACE └── src ├── main │ └── scala │ └── com │ └── example │ ├── A.scala │ ├── B.scala │ ├── BUILD │ ├── C.scala │ └── Example.scala └── test └── scala └── com └── example ├── BUILD ├── ExampleTest.scala └── Example2Test.scala
34.
35.
f(A,B,C)f( ) A B C
36.
37.
hash1 hash2
38.
39.
scala_toolchain( name = "my_toolchain_impl", scalacopts
= ["-Ywarn-unused"], unused_dependency_checker_mode = "off", visibility = ["//visibility:public"] )
40.
--unused_dependency_checker_mode=WARN|ERROR ... error:Target '//some_package:unused_dep' is
specified as a dependency to //path/to:foo but isn't used, please remove it from the deps. buildozer 'remove deps //some_package:unused_dep' //path/to:foo foo B unused
41.
--strict_java_deps=WARN|ERROR ... Target '@cats//jar' is
used but isn't explicitly declared, please add it to the deps. buildozer 'add deps @cats//jar' //path/to:foo foo specs2 cats
42.
--strict_java_deps=WARN|ERROR ... Target '@cats//jar' is
used but isn't explicitly declared, please add it to the deps. buildozer 'add deps @cats//jar' //path/to:foo Based on Jason Zaugg’s Classpath Shrinker plugin foo specs2 cats
43.
44.
45.
scala_toolchain( name = "wix_plus_one_global_toolchain_impl", scalacopts
= [ "-unchecked", ... ], plus_one_deps_mode = "on", scalac_provider_attr = "@core_server_build_tools//toolchains:scalac_default", visibility = ["//visibility:public"], )
46.
build --strategy=Scalac=worker
47.
48.
Scala 2.11.12 scala_repositories(("2.12.6", { "scala_compiler":
"3023b07cc02f2b0217b2c04f8e636b396130b3a8544a8dfad498a19c3e57a863", "scala_library": "f81d7144f0ce1b8123335b72ba39003c4be2870767aca15dd0888ba3dab65e98", "scala_reflect": "ffa70d522fc9f9deec14358aa674e6dd75c9dfa39d4668ef15bb52f002ce99fa" }))
Download now