tree: 1978b070d6bbeb075076eeaa01d231ea93cdacbe [path history] [tgz]
  1. javabuilder/
  2. langtools/
  3. README.md
third_party/java/jdk/README.md

Java compilers in Bazel

Bazel compiles Java code using a custom builder. This builder is called JavaBuilder and its code lies in //src/java_tools/buildjar. To build Java code, JavaBuilder use the Java compiler from the JDK. To support ErrorProne checks, we vendor a custom build of the Java compiler code. This is the raw version of the Java compiler from OpenJDK but compiled for a lower version of the JRE. Those builds are vendored in //third_party/java/jdk/langtools.

Currently Bazel supports running on a JRE 8 only because the default Java compiler used (//third_party/java/jdk/langtools/javac-9-dev-r3297-4.jar) is the Java compiler of OpenJDK 9 compiled to run on a JRE 8. This cannot be built to run on a JRE 7 because of code incompatibility. Bazel's JavaBuilder at HEAD cannot be linked with earlier version of the Java compiler (it depends on some internals of the Java compiler).

To build a version of Bazel that can run on a JRE 7, we need to rely on the version of JavaBuilder provided with Bazel 0.1.0 (//third_party/java/jdk/javabuilder/JavaBuilder_0.1.0_deploy.jar) which works with a Java compiler of OpenJDK 8 compiled to run on a JRE 7 (//third_party/java/jdk/langtools/javac7.jar).