<html devsite>
<head>
  <meta name="project_path" value="/_project.yaml">
  <meta name="book_path" value="/versions/6.1.0/_book.yaml">
</head>
<body>

<h1 class="page-title" id="modules.JavaToolchainInfo">JavaToolchainInfo</h1>

<!-- {% raw %} -->

Provides access to information about the Java toolchain rule. Accessible as a 'java_toolchain' field on a Target struct.

<h2>Members</h2>
<ul>
    <li>
    <a href="#bootclasspath">bootclasspath</a>
  </li>
      <li>
    <a href="#compatible_javacopts">compatible_javacopts</a>
  </li>
      <li>
    <a href="#jacocorunner">jacocorunner</a>
  </li>
      <li>
    <a href="#java_runtime">java_runtime</a>
  </li>
      <li>
    <a href="#jvm_opt">jvm_opt</a>
  </li>
      <li>
    <a href="#one_version_allowlist">one_version_allowlist</a>
  </li>
      <li>
    <a href="#one_version_tool">one_version_tool</a>
  </li>
      <li>
    <a href="#single_jar">single_jar</a>
  </li>
      <li>
    <a href="#source_version">source_version</a>
  </li>
      <li>
    <a href="#target_version">target_version</a>
  </li>
      <li>
    <a href="#timezone_data">timezone_data</a>
  </li>
      <li>
    <a href="#to_json">to_json</a>
  </li>
      <li>
    <a href="#to_proto">to_proto</a>
  </li>
      <li>
    <a href="#tools">tools</a>
  </li>
  </ul>

      <h2 id="bootclasspath">bootclasspath</h2>
        <p><pre class="rule-signature"><a class="anchor" href="depset.html">depset</a> JavaToolchainInfo.bootclasspath</pre></p>

    The Java target bootclasspath entries. Corresponds to javac's -bootclasspath flag.


        <h2 id="compatible_javacopts">compatible_javacopts</h2>
        <p><pre class="rule-signature"><a class="anchor" href="list.html">list</a> JavaToolchainInfo.compatible_javacopts(key)</pre></p>

    Return the map of target environment-specific javacopts

          <!-- hide-from-toc is a class used by DevSite for the public Bazel site
      (https://developers.google.com/devsite/reference/styles/headings#hide_headings_from_the_toc) -->
      <h3 class="hide-from-toc">Parameters</h3>
      <table class="table table-bordered table-condensed table-params">
        <colgroup>
          <col class="col-param">
          <col class="param-description">
        </colgroup>
        <thead>
          <tr>
            <th>Parameter</th>
            <th>Description</th>
          </tr>
        </thead>
        <tbody>
                  <tr>
            <td id="compatible_javacopts.key">
              <code>key</code>
            </td>
            <td>
                          <code><a class="anchor" href="string.html">string</a></code>;
                                     required<br/>

            </td>
          </tr>
                </tbody>
      </table>
         May return <code>None</code>.

        <h2 id="jacocorunner">jacocorunner</h2>
        <p><pre class="rule-signature"><a class="anchor" href="FilesToRunProvider.html">FilesToRunProvider</a> JavaToolchainInfo.jacocorunner</pre></p>

    The jacocorunner used by the toolchain.

         May return <code>None</code>.

        <h2 id="java_runtime">java_runtime</h2>
        <p><pre class="rule-signature"><a class="anchor" href="JavaRuntimeInfo.html">JavaRuntimeInfo</a> JavaToolchainInfo.java_runtime</pre></p>

    The java runtime information.


        <h2 id="jvm_opt">jvm_opt</h2>
        <p><pre class="rule-signature"><a class="anchor" href="depset.html">depset</a> JavaToolchainInfo.jvm_opt</pre></p>

    The default options for the JVM running the java compiler and associated tools.


        <h2 id="one_version_allowlist">one_version_allowlist</h2>
        <p><pre class="rule-signature"><a class="anchor" href="File.html">File</a> JavaToolchainInfo.one_version_allowlist</pre></p>

    The allowlist used by the One-Version compliance checker

         May return <code>None</code>.

        <h2 id="one_version_tool">one_version_tool</h2>
        <p><pre class="rule-signature"><a class="anchor" href="FilesToRunProvider.html">FilesToRunProvider</a> JavaToolchainInfo.one_version_tool</pre></p>

    The artifact that enforces One-Version compliance of java binaries.

         May return <code>None</code>.

        <h2 id="single_jar">single_jar</h2>
        <p><pre class="rule-signature"><a class="anchor" href="File.html">File</a> JavaToolchainInfo.single_jar</pre></p>

    The SingleJar deploy jar.


        <h2 id="source_version">source_version</h2>
        <p><pre class="rule-signature"><a class="anchor" href="string.html">string</a> JavaToolchainInfo.source_version</pre></p>

    The java source version.


        <h2 id="target_version">target_version</h2>
        <p><pre class="rule-signature"><a class="anchor" href="string.html">string</a> JavaToolchainInfo.target_version</pre></p>

    The java target version.


        <h2 id="timezone_data">timezone_data</h2>
        <p><pre class="rule-signature"><a class="anchor" href="File.html">File</a> JavaToolchainInfo.timezone_data()</pre></p>

    The latest timezone data resource jar that can be loaded by java binaries

         May return <code>None</code>.

        <h2 id="to_json">to_json</h2>
        <p><pre class="rule-signature"><a class="anchor" href="string.html">string</a> JavaToolchainInfo.to_json()</pre></p>

    <b>Deprecated</b>. This API is deprecated and will be removed soon. Please do not depend on it. It is <i>disabled</i> with <code>---incompatible_struct_has_no_methods</code>. Use this flag to verify your code is compatible with its imminent removal. <br>Creates a JSON string from the struct parameter. This method only works if all struct elements (recursively) are strings, ints, booleans, other structs, a list of these types or a dictionary with string keys and values of these types. Quotes and new lines in strings are escaped. Examples:<br><pre class=language-python>struct(key=123).to_json()
# {"key":123}

struct(key=True).to_json()
# {"key":true}

struct(key=[1, 2, 3]).to_json()
# {"key":[1,2,3]}

struct(key='text').to_json()
# {"key":"text"}

struct(key=struct(inner_key='text')).to_json()
# {"key":{"inner_key":"text"}}

struct(key=[struct(inner_key=1), struct(inner_key=2)]).to_json()
# {"key":[{"inner_key":1},{"inner_key":2}]}

struct(key=struct(inner_key=struct(inner_inner_key='text'))).to_json()
# {"key":{"inner_key":{"inner_inner_key":"text"}}}
</pre>.<p>Deprecated: instead, use json.encode(x) or json.encode_indent(x), which work for values other than structs and do not pollute the struct field namespace.


        <h2 id="to_proto">to_proto</h2>
        <p><pre class="rule-signature"><a class="anchor" href="string.html">string</a> JavaToolchainInfo.to_proto()</pre></p>

    <b>Deprecated</b>. This API is deprecated and will be removed soon. Please do not depend on it. It is <i>disabled</i> with <code>---incompatible_struct_has_no_methods</code>. Use this flag to verify your code is compatible with its imminent removal. <br>Creates a text message from the struct parameter. This method only works if all struct elements (recursively) are strings, ints, booleans, other structs or dicts or lists of these types. Quotes and new lines in strings are escaped. Struct keys are iterated in the sorted order. Examples:<br><pre class=language-python>struct(key=123).to_proto()
# key: 123

struct(key=True).to_proto()
# key: true

struct(key=[1, 2, 3]).to_proto()
# key: 1
# key: 2
# key: 3

struct(key='text').to_proto()
# key: "text"

struct(key=struct(inner_key='text')).to_proto()
# key {
#   inner_key: "text"
# }

struct(key=[struct(inner_key=1), struct(inner_key=2)]).to_proto()
# key {
#   inner_key: 1
# }
# key {
#   inner_key: 2
# }

struct(key=struct(inner_key=struct(inner_inner_key='text'))).to_proto()
# key {
#    inner_key {
#     inner_inner_key: "text"
#   }
# }

struct(foo={4: 3, 2: 1}).to_proto()
# foo: {
#   key: 4
#   value: 3
# }
# foo: {
#   key: 2
#   value: 1
# }
</pre><p>Deprecated: use proto.encode_text(x) instead.


        <h2 id="tools">tools</h2>
        <p><pre class="rule-signature"><a class="anchor" href="depset.html">depset</a> JavaToolchainInfo.tools</pre></p>

    The compilation tools.



</body>
</html>

<!-- {% endraw %} -->
