SlideShare a Scribd company logo
1 of 13
Download to read offline
Bazel Basic Terminology
(for Maven users)
In Maven
Pom files determine the
build units.
group_id:artifact_0
group_id:artifact_1
scala_project
├── pom.xml
├── m0
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── scala
│ │ └── com
│ │ └── example
│ │ └── Example.scala
│ └── test
│ └── scala
│ └── com
│ ├── example
│ └── ExampleTest.scala
└── m1
├── pom.xml
└── src
└── main
In Bazel
You control the level of granularity
to build.
scala_project
├── WORKSPACE
└── src
└── main
└── scala
└── com
├── example
│ ├── A.scala
│ ├── B.scala
│ └── C.scala
└── example2
├── D.scala
├── E.scala
└── F.scala
The unit of
organization is the
package
scala_project
├── WORKSPACE
└── src
└── main
└── scala
└── com
├── example
│ ├── A.scala
│ ├── B.scala
│ └── C.scala
└── example2
├── D.scala
├── E.scala
└── F.scala
Package
To define a package
you need to declare a BUILD file in it
scala_project
├── WORKSPACE
└── src
└── main
└── scala
└── com
├── example
│ ├── A.scala
│ ├── B.scala
│ ├── BUILD
│ └── C.scala
└── example2
├── D.scala
├── E.scala
└── F.scala
Package
The elements of a
package are called
Targets
scala_project
├── WORKSPACE
└── src
└── main
└── scala
└── com
├── example
│ ├── A.scala
│ ├── B.scala
│ ├── BUILD
│ └── C.scala
└── example2
├── D.scala
├── E.scala
└── F.scala
Target
targets are one of two principal kinds,
files and rules.
Target is an instance
of a Rule
scala_project
├── WORKSPACE
└── src
└── main
└── scala
└── com
├── example
│ ├── A.scala
│ ├── B.scala
│ ├── BUILD
│ └── C.scala
└── example2
├── D.scala
├── E.scala
└── F.scala
Relationship between a set of input
and a set of output files
Target
B.scala -> scala_library -> B.jar
Foo.cc + Foo.h -> cc_library -> Foo.dll
scala_project
├── WORKSPACE
└── src
├── main
│ └── scala
│ └── com
│ └── example
│ ├── A.scala
│ ├── B.scala
│ ├── BUILD
│ ├── C.scala
│ └── Example.scala
└── test
└── scala
└── com
└── example
├── BUILD
├── ExampleTest.scala
└── ExampleTest2.scala
BUILD
targets
examples
scala_library(
name="a",
srcs=[
"A.scala",
],
deps = ["c"])
scala_library(
name="c",
srcs=[
"C.scala",
])
scala_library(
name="example_test",
srcs=glob(["Example*.scala"]))
a
c
Example_test
All Bazel builds take
place in a workspace.
Scala_project
├── WORKSPACE
└── src
├── main
│ └── scala
│ └── com
│ └── example
│ ├── A.scala
│ ├── B.scala
│ ├── BUILD
│ ├── C.scala
│ └── Example.scala
└── test
└── scala
└── com
└── example
├── ExampleTest.scala
A workspace is a directory in the file
system that contains a file named
WORKSPACE.
The file contain references to external
dependencies or could be empty
Workspace file example
Scala_project
├── WORKSPACE
└── src
├── main
│ └── scala
│ └── com
│ └── example
│ ├── A.scala
│ ├── B.scala
│ ├── BUILD
│ ├── C.scala
│ └── Example.scala
└── test
└── scala
└── com
└── example
├── ExampleTest.scala
maven_server(
name = "default",
url =
"http://repo.dev.wixpress.com/artifactory/li
bs-snapshots",
)
maven_jar(
name = "guava",
artifact =
"com.google.guava:guava:18.0",
)
...
All build targets
are referenced using Labels
The target labels are relative to the
location of the workspace file.
//src/main/scala/com/example:a
a
Scala_project
├── WORKSPACE
└── src
├── main
│ └── scala
│ └── com
│ └── example
│ ├── A.scala
│ ├── B.scala
│ ├── BUILD
│ ├── C.scala
│ └── Example.scala
└── test
└── scala
└── com
└── example
├── ExampleTest.scala
Commands
Maven
mvn install -DskipTests=true
mvn install
Bazel
bazel build //...
bazel test //...
just build
build with
tests
Execute Bazel Build
bazel build
//src/main/scala/com/example:a
bazel build
//src/main/scala/com/example:all
a
Scala_project
├── WORKSPACE
└── src
├── main
│ └── scala
│ └── com
│ └── example
│ ├── A.scala
│ ├── B.scala
│ ├── BUILD
│ ├── C.scala
│ └── Example.scala
└── test
└── scala
└── com
└── example
├── ExampleTest.scala
all
bazel build //src/…

More Related Content

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 - ...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...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 microservicesDevSum - Lessons Learned from 2000 microservices
DevSum - Lessons Learned from 2000 microservicesNatan Silnitsky
 
GeeCon - Lessons Learned from 2000 microservices
GeeCon - Lessons Learned from 2000 microservicesGeeCon - Lessons Learned from 2000 microservices
GeeCon - Lessons Learned from 2000 microservicesNatan Silnitsky
 
Migrating to Multi Cluster Managed Kafka - ApacheKafkaIL
Migrating to Multi Cluster Managed Kafka - ApacheKafkaILMigrating to Multi Cluster Managed Kafka - ApacheKafkaIL
Migrating to Multi Cluster Managed Kafka - ApacheKafkaILNatan Silnitsky
 
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven MicroservicesWix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven MicroservicesNatan Silnitsky
 
BuildStuff - Lessons Learned from 2000 Event Driven Microservices
BuildStuff - Lessons Learned from 2000 Event Driven MicroservicesBuildStuff - Lessons Learned from 2000 Event Driven Microservices
BuildStuff - Lessons Learned from 2000 Event Driven MicroservicesNatan Silnitsky
 
Lessons Learned from 2000 Event Driven Microservices - Reversim
Lessons Learned from 2000 Event Driven Microservices - ReversimLessons Learned from 2000 Event Driven Microservices - Reversim
Lessons Learned from 2000 Event Driven Microservices - ReversimNatan Silnitsky
 
Devoxx Ukraine - Kafka based Global Data Mesh
Devoxx Ukraine - Kafka based Global Data MeshDevoxx Ukraine - Kafka based Global Data Mesh
Devoxx Ukraine - Kafka based Global Data MeshNatan Silnitsky
 
Devoxx UK - Migrating to Multi Cluster Managed Kafka
Devoxx UK - Migrating to Multi Cluster Managed KafkaDevoxx UK - Migrating to Multi Cluster Managed Kafka
Devoxx UK - Migrating to Multi Cluster Managed KafkaNatan Silnitsky
 
Dev Days Europe - Kafka based Global Data Mesh at Wix
Dev Days Europe - Kafka based Global Data Mesh at WixDev Days Europe - Kafka based Global Data Mesh at Wix
Dev Days Europe - Kafka based Global Data Mesh at WixNatan Silnitsky
 
Kafka Summit London - Kafka based Global Data Mesh at Wix
Kafka Summit London - Kafka based Global Data Mesh at WixKafka Summit London - Kafka based Global Data Mesh at Wix
Kafka Summit London - Kafka based Global Data Mesh at WixNatan Silnitsky
 
Migrating to Multi Cluster Managed Kafka - Conf42 - CloudNative
Migrating to Multi Cluster Managed Kafka - Conf42 - CloudNative 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 Love5 Takeaways from Migrating a Library to Scala 3 - Scala Love
5 Takeaways from Migrating a Library to Scala 3 - Scala LoveNatan Silnitsky
 
Migrating to Multi Cluster Managed Kafka - DevopStars 2022
Migrating to Multi Cluster Managed Kafka - DevopStars 2022Migrating to Multi Cluster Managed Kafka - DevopStars 2022
Migrating to Multi Cluster Managed Kafka - DevopStars 2022Natan Silnitsky
 
Open sourcing a successful internal project - Reversim 2021
Open sourcing a successful internal project - Reversim 2021Open sourcing a successful internal project - Reversim 2021
Open sourcing a successful internal project - Reversim 2021Natan Silnitsky
 
How to successfully manage a ZIO fiber’s lifecycle - Functional Scala 2021
How to successfully manage a ZIO fiber’s lifecycle - Functional Scala 2021How to successfully manage a ZIO fiber’s lifecycle - Functional Scala 2021
How to successfully manage a ZIO fiber’s lifecycle - Functional Scala 2021Natan Silnitsky
 
Advanced Caching Patterns used by 2000 microservices - Code Motion
Advanced Caching Patterns used by 2000 microservices - Code MotionAdvanced Caching Patterns used by 2000 microservices - Code Motion
Advanced Caching Patterns used by 2000 microservices - Code MotionNatan Silnitsky
 
Advanced Caching Patterns used by 2000 microservices - Devoxx Ukraine
Advanced Caching Patterns used by 2000 microservices - Devoxx UkraineAdvanced Caching Patterns used by 2000 microservices - Devoxx Ukraine
Advanced Caching Patterns used by 2000 microservices - Devoxx UkraineNatan Silnitsky
 
Advanced Microservices Caching Patterns - Devoxx UK
Advanced Microservices Caching Patterns - Devoxx UKAdvanced Microservices Caching Patterns - Devoxx UK
Advanced Microservices Caching Patterns - Devoxx UKNatan 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 - ...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...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 microservicesDevSum - Lessons Learned from 2000 microservices
DevSum - Lessons Learned from 2000 microservices
 
GeeCon - Lessons Learned from 2000 microservices
GeeCon - Lessons Learned from 2000 microservicesGeeCon - Lessons Learned from 2000 microservices
GeeCon - Lessons Learned from 2000 microservices
 
Migrating to Multi Cluster Managed Kafka - ApacheKafkaIL
Migrating to Multi Cluster Managed Kafka - ApacheKafkaILMigrating 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 MicroservicesWix+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 MicroservicesBuildStuff - 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 - ReversimLessons 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 MeshDevoxx 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 KafkaDevoxx 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 WixDev 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 WixKafka 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 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 Love5 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 2022Migrating 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 2021Open 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 2021How 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 MotionAdvanced 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 UkraineAdvanced 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 UKAdvanced Microservices Caching Patterns - Devoxx UK
Advanced Microservices Caching Patterns - Devoxx UK
 

Bazel basic terminology (For Maven users)

  • 2. In Maven Pom files determine the build units. group_id:artifact_0 group_id:artifact_1 scala_project ├── pom.xml ├── m0 │ ├── pom.xml │ └── src │ ├── main │ │ └── scala │ │ └── com │ │ └── example │ │ └── Example.scala │ └── test │ └── scala │ └── com │ ├── example │ └── ExampleTest.scala └── m1 ├── pom.xml └── src └── main
  • 3. In Bazel You control the level of granularity to build. scala_project ├── WORKSPACE └── src └── main └── scala └── com ├── example │ ├── A.scala │ ├── B.scala │ └── C.scala └── example2 ├── D.scala ├── E.scala └── F.scala
  • 4. The unit of organization is the package scala_project ├── WORKSPACE └── src └── main └── scala └── com ├── example │ ├── A.scala │ ├── B.scala │ └── C.scala └── example2 ├── D.scala ├── E.scala └── F.scala Package
  • 5. To define a package you need to declare a BUILD file in it scala_project ├── WORKSPACE └── src └── main └── scala └── com ├── example │ ├── A.scala │ ├── B.scala │ ├── BUILD │ └── C.scala └── example2 ├── D.scala ├── E.scala └── F.scala Package
  • 6. The elements of a package are called Targets scala_project ├── WORKSPACE └── src └── main └── scala └── com ├── example │ ├── A.scala │ ├── B.scala │ ├── BUILD │ └── C.scala └── example2 ├── D.scala ├── E.scala └── F.scala Target targets are one of two principal kinds, files and rules.
  • 7. Target is an instance of a Rule scala_project ├── WORKSPACE └── src └── main └── scala └── com ├── example │ ├── A.scala │ ├── B.scala │ ├── BUILD │ └── C.scala └── example2 ├── D.scala ├── E.scala └── F.scala Relationship between a set of input and a set of output files Target B.scala -> scala_library -> B.jar Foo.cc + Foo.h -> cc_library -> Foo.dll
  • 8. scala_project ├── WORKSPACE └── src ├── main │ └── scala │ └── com │ └── example │ ├── A.scala │ ├── B.scala │ ├── BUILD │ ├── C.scala │ └── Example.scala └── test └── scala └── com └── example ├── BUILD ├── ExampleTest.scala └── ExampleTest2.scala BUILD targets examples scala_library( name="a", srcs=[ "A.scala", ], deps = ["c"]) scala_library( name="c", srcs=[ "C.scala", ]) scala_library( name="example_test", srcs=glob(["Example*.scala"])) a c Example_test
  • 9. All Bazel builds take place in a workspace. Scala_project ├── WORKSPACE └── src ├── main │ └── scala │ └── com │ └── example │ ├── A.scala │ ├── B.scala │ ├── BUILD │ ├── C.scala │ └── Example.scala └── test └── scala └── com └── example ├── ExampleTest.scala A workspace is a directory in the file system that contains a file named WORKSPACE. The file contain references to external dependencies or could be empty
  • 10. Workspace file example Scala_project ├── WORKSPACE └── src ├── main │ └── scala │ └── com │ └── example │ ├── A.scala │ ├── B.scala │ ├── BUILD │ ├── C.scala │ └── Example.scala └── test └── scala └── com └── example ├── ExampleTest.scala maven_server( name = "default", url = "http://repo.dev.wixpress.com/artifactory/li bs-snapshots", ) maven_jar( name = "guava", artifact = "com.google.guava:guava:18.0", ) ...
  • 11. All build targets are referenced using Labels The target labels are relative to the location of the workspace file. //src/main/scala/com/example:a a Scala_project ├── WORKSPACE └── src ├── main │ └── scala │ └── com │ └── example │ ├── A.scala │ ├── B.scala │ ├── BUILD │ ├── C.scala │ └── Example.scala └── test └── scala └── com └── example ├── ExampleTest.scala
  • 12. Commands Maven mvn install -DskipTests=true mvn install Bazel bazel build //... bazel test //... just build build with tests
  • 13. Execute Bazel Build bazel build //src/main/scala/com/example:a bazel build //src/main/scala/com/example:all a Scala_project ├── WORKSPACE └── src ├── main │ └── scala │ └── com │ └── example │ ├── A.scala │ ├── B.scala │ ├── BUILD │ ├── C.scala │ └── Example.scala └── test └── scala └── com └── example ├── ExampleTest.scala all bazel build //src/…