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

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

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

Information about outputs of a Java rule. Deprecated: use java_info.java_outputs.

<h2>Members</h2>
<ul>
    <li>
    <a href="#jars">jars</a>
  </li>
      <li>
    <a href="#jdeps">jdeps</a>
  </li>
      <li>
    <a href="#native_headers">native_headers</a>
  </li>
  </ul>

      <h2 id="jars">jars</h2>
        <p><pre class="rule-signature"><a class="anchor" href="list.html">list</a> java_output_jars.jars</pre></p>

    Returns information about outputs of this Java/Java-like target. Deprecated: Use java_info.java_outputs.


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

    A manifest proto file. The protobuf file containing the manifest generated from JavaBuilder. This function returns a value when exactly one manifest proto file is present in the outputs.  Deprecated: Use java_info.java_outputs[i].jdeps.

         May return <code>None</code>.

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

    A jar containing CC header files supporting native method implementation.  This function returns a value when exactly one native headers jar file is present in the outputs. Deprecated: Use java_info.java_outputs[i].native_headers_jar.

         May return <code>None</code>.


</body>
</html>

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