---
title: 'java'
---

A java compiler configuration.

## Members

* [bytecode\_optimization\_pass\_actions](#bytecode_optimization_pass_actions)
* [bytecode\_optimizer\_mnemonic](#bytecode_optimizer_mnemonic)
* [default\_javac\_flags](#default_javac_flags)
* [default\_javac\_flags\_depset](#default_javac_flags_depset)
* [default\_jvm\_opts](#default_jvm_opts)
* [disallow\_java\_import\_empty\_jars](#disallow_java_import_empty_jars)
* [disallow\_java\_import\_exports](#disallow_java_import_exports)
* [multi\_release\_deploy\_jars](#multi_release_deploy_jars)
* [one\_version\_enforcement\_level](#one_version_enforcement_level)
* [plugins](#plugins)
* [run\_android\_lint](#run_android_lint)
* [split\_bytecode\_optimization\_pass](#split_bytecode_optimization_pass)
* [strict\_java\_deps](#strict_java_deps)
* [use\_ijars](#use_ijars)

## bytecode\_optimization\_pass\_actions

```
int java.bytecode_optimization_pass_actions
```

This specifies the number of actions to divide the OPTIMIZATION stage of the bytecode optimizer into. Note that if split\_bytecode\_optimization\_pass is set, this will only change behavior if it is > 2.

## bytecode\_optimizer\_mnemonic

```
string java.bytecode_optimizer_mnemonic
```

The mnemonic for the bytecode optimizer.

## default\_javac\_flags

```
list java.default_javac_flags
```

The default flags for the Java compiler.

## default\_javac\_flags\_depset

```
depset java.default_javac_flags_depset
```

The default flags for the Java compiler.

## default\_jvm\_opts

```
list java.default_jvm_opts
```

Additional options to pass to the Java VM for each java\_binary target

## disallow\_java\_import\_empty\_jars

```
bool java.disallow_java_import_empty_jars()
```

Returns true if empty java\_import jars are not allowed.

## disallow\_java\_import\_exports

```
bool java.disallow_java_import_exports()
```

Returns true if java\_import exports are not allowed.

## multi\_release\_deploy\_jars

```
bool java.multi_release_deploy_jars
```

The value of the --incompatible\_multi\_release\_deploy\_jars flag.

## one\_version\_enforcement\_level

```
string java.one_version_enforcement_level
```

The value of the --experimental\_one\_version\_enforcement flag.

## plugins

```
list java.plugins
```

A list containing the labels provided with --plugins, if any.

## run\_android\_lint

```
bool java.run_android_lint
```

The value of the --experimental\_run\_android\_lint\_on\_java\_rules flag.

## split\_bytecode\_optimization\_pass

```
bool java.split_bytecode_optimization_pass
```

Returns whether the OPTIMIZATION stage of the bytecode optimizer will be split across two actions.

## strict\_java\_deps

```
string java.strict_java_deps
```

The value of the strict\_java\_deps flag.

## use\_ijars

```
bool java.use_ijars()
```

Returns true iff Java compilation should use ijars.