---
title: 'JavaRuntimeInfo'
---
Information about the Java runtime being used.

## Members

* [default_cds](#default_cds)
* [files](#files)
* [hermetic_files](#hermetic_files)
* [hermetic_static_libs](#hermetic_static_libs)
* [java_executable_exec_path](#java_executable_exec_path)
* [java_executable_runfiles_path](#java_executable_runfiles_path)
* [java_home](#java_home)
* [java_home_runfiles_path](#java_home_runfiles_path)
* [lib_ct_sym](#lib_ct_sym)
* [lib_modules](#lib_modules)
* [version](#version)

## default_cds {#default_cds}

```
File JavaRuntimeInfo.default_cds
```

Returns the JDK default CDS archive.
May return `None`.
## files {#files}

```
depset JavaRuntimeInfo.files
```

Returns the files in the Java runtime.
## hermetic_files {#hermetic_files}

```
depset JavaRuntimeInfo.hermetic_files
```

Returns the files in the Java runtime needed for hermetic deployments.
## hermetic_static_libs {#hermetic_static_libs}

```
sequence JavaRuntimeInfo.hermetic_static_libs
```

Returns the JDK static libraries.
## java_executable_exec_path {#java_executable_exec_path}

```
string JavaRuntimeInfo.java_executable_exec_path
```

Returns the execpath of the Java executable.
## java_executable_runfiles_path {#java_executable_runfiles_path}

```
string JavaRuntimeInfo.java_executable_runfiles_path
```

Returns the path of the Java executable in runfiles trees. This should only be used when one needs to access the JVM during the execution of a binary or a test built by Bazel. In particular, when one needs to invoke the JVM during an action, java_executable_exec_path should be used instead.
## java_home {#java_home}

```
string JavaRuntimeInfo.java_home
```

Returns the execpath of the root of the Java installation.
## java_home_runfiles_path {#java_home_runfiles_path}

```
string JavaRuntimeInfo.java_home_runfiles_path
```

Returns the path of the Java installation in runfiles trees. This should only be used when one needs to access the JDK during the execution of a binary or a test built by Bazel. In particular, when one needs the JDK during an action, java_home should be used instead.
## lib_ct_sym {#lib_ct_sym}

```
File JavaRuntimeInfo.lib_ct_sym
```

Returns the lib/ct.sym file.
May return `None`.
## lib_modules {#lib_modules}

```
File JavaRuntimeInfo.lib_modules
```

Returns the lib/modules file.
May return `None`.
## version {#version}

```
int JavaRuntimeInfo.version
```

The Java feature version of the runtime. This is 0 if the version is unknown.