aboutsummaryrefslogtreecommitdiffhomepage
path: root/site/blog/_posts/2015-07-08-Java-Configuration.md
blob: 623b424ae7648ea9c382c3a984788f26b7b34211 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
---
layout: posts
title: Configuring your Java builds
---

Let say that you want to build for Java 8 and Error Prone checks off but keep
the tools directory provided with Bazel in the package path, you could do that
by having the following rc file:

```
build --javacopt=-XepDisableAllChecks
build --javacopt="-source 8 -target 8"
```

However, the file would becomes quickly overloaded, especially if you take
all languages and options into account. Instead, you can tweak the
[java_toolchain](https://github.com/bazelbuild/bazel/tree/0e1680e58f01f3d443f7e68865b5a56b76c9dadf/tools/jdk/BUILD#L73)
rule that specifies the various options for the java compiler. So in a
BUILD file:

```python
java_toolchain(
    name = "my_toolchain",
    encoding = "UTF-8",
    source_version = "8",
    target_version = "8",
    misc = [
        "-Xep:CollectionIncompatibleType:ERROR", # https://errorprone.info/bugpattern/CollectionIncompatibleType
    ],
)
```

And to keep it out of the tools directory (or you need to copy the rest
of the package), you can redirect the default one in a bazelrc:

```
build --java_toolchain=//package:my_toolchain
```

In the future, toolchain rules should be the configuration points for all
the languages but it is a long road. We also want to make it easier to
rebind the toolchain using the `bind` rule in the WORKSPACE file.