Logo

View on GitHub
  • Exodus Home
  • Migrating Maven to Bazel
  • Bazel Basics
  • How Exodus Works
  • Prerequistes
  • Run Migration Locally
  • Run Migration on Jenkins
  • Override Mechanism
  • Troubleshooting

Exodus - Maven to Bazel Migration

Thinking about migrating from Maven or similar to another build system? This is our story at Wix. For some more background info, take a look at our blog articles on Medium.

Maven had been good to us…for a time

Like many Java or Scala developers, you have probably been using Apache Maven to build your projects. We got used to working with POM (project object model) files and waiting for our projects to build, hoping we had no errors and those pesky dependencies would all work out.

Maven was good to us when our repositories were a certain size and had less complex dependencies. Maven builds took hours to finish in CI on any infrastructure code change.

At Wix we realized we needed a new build manager.

Why Bazel

After evaluating several solutions, Bazel was chosen as the best alternative build tool.

Faster builds and tests

The most significant advantage of Bazel is the speed of the build process. What used to take us hours now takes us minutes.

How does Bazel perform so fast? It uses:

  • Caching - previous results and meta data are cached so they can be skipped on subsequent builds.
  • Parallelism - can run compilations and tests in parallel.
  • Hermeticity - builds can access only what is declared and pre-fetched, so they run ‘hermetically’ without unnecesary noise from additional files.

Multi-language environment

Here at Wix, we support different software languages and it’s a huge advantage to be able to build multiple languages simultaneously. Currently we migrated JVM languages, but we are thinking of migrating node.js and maybe even React as well.

Scalability

Bazel can handle multiple repositories or any size mono-repo. We are able to scale our codebase and our continuous integration system. We use a build workers farm (read about Bazel remote execution) and can scale out build actions to hunderds of workers simultaneously. This means we have room to grow our code which is already at around 10 million lines of code in JVM languages

Extend languages and platforms

Bazel enables us to extend to more languages and platforms using Bazel’s familiar extension language. Because there is a growing community of Bazel users, we can share and re-use language rules written by other teams. We maintain and contribute to rules_scala, a large thriving community of rules contributers.

How to migrate

So now that you’re considering migrating from Maven to Bazel, you may be intimated by the manual migration provided in the Bazel documentation.

Good news! We at Wix have created Exodus, an automated migration tool, and are providing you the files and documentation you need to more easily perform the migration.

exodus is maintained by wix. This page was generated by GitHub Pages.