|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
- <html>
-
- <head>
- <meta http-equiv="Content-Language" content="en-us">
- <link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
- <title>Javah Task</title>
- </head>
-
- <body>
-
- <h2><a name="javah">Javah</a></h2>
- <h3>Description</h3>
- <p>Generates JNI headers from a Java class.</p>
- <p> When this task executes, it will generate the C header and source files that
- are needed to implement native methods. JNI operates differently depending on
- whether <a href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javah.html">JDK1.2+</a>
- or <a href="http://java.sun.com/products/jdk/1.1/docs/tooldocs/win32/javah.html">pre-JDK1.2</a>
- systems are used.</p>
-
- <p>If you are building with Java 8 or above consider
- using <a href="javac.html"><code>javac</code></a>'s <code>nativeheaderdir</code>
- attribute instead which allows you to compile the classes and
- generate the native header files with a single step.</p>
-
- <p><b>Note</b> the <code>javah</code> has been deprecated as of Java 9
- and removed as of Java 10. Trying to use it with Java10 will
- fail.</p>
-
- <p>It is possible to use different compilers. This can be selected
- with the <code>implementation</code> attribute or a nested element. <a
- name="implementationvalues">Here are the choices of the attribute</a>:</p>
- <ul>
- <li>default - the default compiler for the platform.</li>
- <li>sun (the standard compiler of the JDK) - default when not
- running on Kaffee or gcj/gij or Java9.</li>
- <li>kaffeh (the native standard compiler of <a href="http://www.kaffe.org" target="_top">Kaffe</a>)</li>
- <li>gcjh (the native standard compiler
- of <a href="http://gcc.gnu.org/java/"
- target="_top">gcj and gij</a>) <em>since Apache Ant 1.8.2</em></li>
- <li>forking - runs the javah executable via its command line
- interface in a separate process. Default when running on
- Java9. <em>since Ant 1.9.8</em></li>
- </ul>
-
- <p><b>Note:</b> if you are using this task to work on multiple files
- the command line may become too long on some operating systems.
- Unfortunately the javah command doesn't support command argument
- files the way javac (for example) does, so all that can be done is
- breaking the amount of classes to compile into smaller chunks.</p>
-
- <h3>Parameters</h3>
- <table border="1" cellpadding="2" cellspacing="0">
- <tr>
- <td valign="top"><b>Attribute</b></td>
- <td valign="top"><b>Description</b></td>
- <td valign="top" align="center"><b>Required</b></td>
- </tr>
- <tr>
- <td valign="top">class</td>
- <td valign="top">the fully-qualified name of the class (or classes,
- separated by commas)</td>
- <td align="center" valign="top">Yes</td>
- </tr>
- <tr>
- <td valign="top">outputFile</td>
- <td valign="top">concatenates the resulting header or source files for all the classes listed into this file</td>
- <td align="center" valign="middle" rowspan="2">Yes</td>
- </tr>
- <tr>
- <td valign="top">destdir</td>
- <td valign="top">sets the directory where javah saves the header files or the
- stub files.</td>
- </tr>
- <tr>
- <td valign="top">force</td>
- <td valign="top">specifies that output files should always be written (JDK1.2 only)</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">old</td>
- <td valign="top">specifies that old JDK1.0-style header files should be generated
- (otherwise output file contain JNI-style native method function prototypes) (JDK1.2 only)</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">stubs</td>
- <td valign="top">generate C declarations from the Java object file (used with old)</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">verbose</td>
- <td valign="top">causes Javah to print a message concerning the status of the generated files</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">classpath</td>
- <td valign="top">the classpath to use.</td>
- <td align="center" valign="top">No</td>
- </tr>
- <tr>
- <td valign="top">bootclasspath</td>
- <td valign="top">location of bootstrap class files.</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">extdirs</td>
- <td valign="top"> location of installed extensions.</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">implementation</td>
- <td valign="top">The compiler implementation to use. If this
- attribute is not set, the default compiler for the current VM
- will be used. (See the above <a
- href="#implementationvalues">list</a> of valid compilers.)</td>
- <td align="center" valign="top">No</td>
- </tr>
- </table>
- <p>Either outputFile or destdir must be supplied, but not both. </p>
-
- <h3>Parameters specified as nested elements</h3>
-
- <h4>arg</h4>
-
- <p>You can specify additional command line arguments for the compiler
- with nested <code><arg></code> elements. These elements are
- specified like <a href="../using.html#arg">Command-line Arguments</a>
- but have an additional attribute that can be used to enable arguments
- only if a given compiler implementation will be used.</p>
-
- <table border="1" cellpadding="2" cellspacing="0">
- <tr>
- <td width="12%" valign="top"><b>Attribute</b></td>
- <td width="78%" valign="top"><b>Description</b></td>
- <td width="10%" valign="top"><b>Required</b></td>
- </tr>
- <tr>
- <td valign="top">value</td>
- <td align="center" rowspan="4">See
- <a href="../using.html#arg">Command-line Arguments</a>.</td>
- <td align="center" rowspan="4">Exactly one of these.</td>
- </tr>
- <tr>
- <td valign="top">line</td>
- </tr>
- <tr>
- <td valign="top">file</td>
- </tr>
- <tr>
- <td valign="top">path</td>
- </tr>
- <tr>
- <td valign="top">prefix</td>
- <td align="center" rowspan="2">See
- <a href="../using.html#arg">Command-line Arguments</a>.
- <em>Since Ant 1.8.</em></td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">suffix</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">implementation</td>
- <td>Only pass the specified argument if the chosen compiler
- implementation matches the value of this attribute. Legal values
- are the same as those in the above <a
- href="#implementationvalues">list</a> of valid compilers.)</td>
- <td align="center">No</td>
- </tr>
- </table>
-
- <h4>implementationclasspath <em>since Ant 1.8.0</em></h4>
-
- <p>A <a href="../using.html#path">PATH like structure</a> holding the
- classpath to use when loading the compiler implementation if a
- custom class has been specified. Doesn't have any effect when
- using one of the built-in compilers.</p>
-
- <h4>Any nested element of a type that implements JavahAdapter
- <em>since Ant 1.8.0</em></h4>
-
- <p>If a defined type implements the <code>JavahAdapter</code>
- interface a nested element of that type can be used as an
- alternative to the <code>implementation</code> attribute.</p>
-
- <h3>Examples</h3>
- <pre> <javah destdir="c" class="org.foo.bar.Wibble"/></pre>
- <p>makes a JNI header of the named class, using the JDK1.2 JNI model. Assuming
- the directory 'c' already exists, the file <tt>org_foo_bar_Wibble.h</tt>
- is created there. If this file already exists, it is left unchanged.</p>
- <pre> <javah outputFile="wibble.h">
- <class name="org.foo.bar.Wibble,org.foo.bar.Bobble"/>
- </javah></pre>
- <p>is similar to the previous example, except the output is written to a file
- called <tt>wibble.h</tt>
- in the current directory.</p>
- <pre> <javah destdir="c" force="yes">
- <class name="org.foo.bar.Wibble"/>
- <class name="org.foo.bar.Bobble"/>
- <class name="org.foo.bar.Tribble"/>
- </javah></pre>
- <p>writes three header files, one for each of the classes named. Because the
- force option is set, these header files are always written when the Javah task
- is invoked, even if they already exist.</p>
- <pre> <javah destdir="c" verbose="yes" old="yes" force="yes">
- <class name="org.foo.bar.Wibble"/>
- <class name="org.foo.bar.Bobble"/>
- <class name="org.foo.bar.Tribble"/>
- </javah>
- <javah destdir="c" verbose="yes" stubs="yes" old="yes" force="yes">
- <class name="org.foo.bar.Wibble"/>
- <class name="org.foo.bar.Bobble"/>
- <class name="org.foo.bar.Tribble"/>
- </javah></pre>
- <p>writes the headers for the three classes using the 'old' JNI format, then
- writes the corresponding .c stubs. The verbose option will cause Javah to
- describe its progress.</p>
-
- <p>If you want to use a custom
- JavahAdapter <code>org.example.MyAdapter</code> you can either
- use the implementation attribute:</p>
- <pre>
- <javah destdir="c" class="org.foo.bar.Wibble"
- implementation="org.example.MyAdapter"/>
- </pre>
- <p>or a define a type and nest this into the task like in:</p>
- <pre>
- <componentdef classname="org.example.MyAdapter"
- name="myadapter"/>
- <javah destdir="c" class="org.foo.bar.Wibble">
- <myadapter/>
- </javah>
- </pre>
- <p>in which case your javah adapter can support attributes and
- nested elements of its own.</p>
-
- </body>
-
- </html>
|