diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/manual/Tasks/javac.html')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/manual/Tasks/javac.html | 860 |
1 files changed, 860 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/manual/Tasks/javac.html b/framework/src/ant/apache-ant-1.9.6/manual/Tasks/javac.html new file mode 100644 index 00000000..ce542463 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/manual/Tasks/javac.html @@ -0,0 +1,860 @@ +<!-- + 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 lang="en-us"> + +<head> +<meta http-equiv="Content-Language" content="en-us"> +<link rel="stylesheet" type="text/css" href="../stylesheets/style.css"> +<title>Javac Task</title> +</head> + +<body> + +<h2><a name="javac">Javac</a></h2> +<h3>Description</h3> +<p>Compiles a Java source tree.</p> +<p>The source and destination directory will be recursively scanned for Java +source files to compile. Only Java files that have no corresponding +<code>.class</code> file +or where the class file is older than the +<code>.java</code> file will be compiled.</p> +<p>Note: Apache Ant uses only the names of the source and class files to find +the classes that need a rebuild. It will not scan the source and therefore +will have no knowledge about nested classes, classes that are named different +from the source file, and so on. See the +<a href="../Tasks/depend.html"><code><depend></code></a> task +for dependency checking based on other than just +existence/modification times.</p> +<p>When the source files are part of a package, the directory structure of +the source tree should follow the package +hierarchy.</p> +<p>It is possible to refine the set of files that are being compiled. +This can be done with the <code>includes</code>, <code>includesfile</code>, +<code>excludes</code>, and <code>excludesfile</code> +attributes. With the <code>includes</code> or +<code>includesfile</code> attribute, you specify the files you want to +have included. +The <code>exclude</code> or <code>excludesfile</code> attribute is used +to specify +the files you want to have excluded. In both cases, the list of files +can be specified by either the filename, relative to the directory(s) specified +in the <code>srcdir</code> attribute or nested <code><src></code> +element(s), or by using wildcard patterns. See the section on +<a href="../dirtasks.html#directorybasedtasks">directory-based tasks</a>, +for information on how the +inclusion/exclusion of files works, and how to write wildcard patterns.</p> +<p>It is possible to use different compilers. This can be specified by +either setting the global <code>build.compiler</code> property, which will +affect all <code><javac></code> tasks throughout the build, by +setting the <code>compiler</code> attribute, specific to the current +<code><javac></code> task or by using a nested element of any +<a href="typedef.html">typedef</a>fed or +<a href="componentdef.html">componentdef</a>fed type that implements +<code>org.apache.tools.ant.taskdefs.compilers.CompilerAdapter</code>. +<a name="compilervalues">Valid values for either the +<code>build.compiler</code> property or the <code>compiler</code> +attribute are:</a></p> +<ul> + <li><code>classic</code> (the standard compiler of JDK 1.1/1.2) – + <code>javac1.1</code> and + <code>javac1.2</code> can be used as aliases.</li> + <li><code>modern</code> (the standard compiler of JDK 1.3 and later) – + <code>javac1.3</code> and + <code>javac1.4</code> and + <code>javac1.5</code> and + <code>javac1.6</code> and + <code>javac1.7</code> (<em>since Ant 1.8.2</em>) and + <code>javac1.8</code> (<em>since Ant 1.8.3</em>) and</li> + <code>javac1.9</code> (<em>since Ant 1.9.5</em>) can be used as aliases.</li> + <li><code>jikes</code> (the <a + href="http://jikes.sourceforge.net/" target="_top">Jikes</a> + compiler).</li> + <li><code>jvc</code> (the Command-Line Compiler from Microsoft's SDK + for Java / Visual J++) – <code>microsoft</code> can be used + as an alias.</li> + <li><code>kjc</code> (the <a href="http://www.dms.at/kopi/" target="_top">kopi</a> + compiler).</li> + <li><code>gcj</code> (the gcj compiler from gcc).</li> + <li><code>sj</code> (Symantec java compiler) – + <code>symantec</code> can be used as an alias.</li> + <li><code>extJavac</code> (run either modern or classic in a JVM of + its own).</li> +</ul> +<p>The default is <code>javac1.x</code> with <code>x</code> depending +on the JDK version you use while you are running Ant. +If you wish to use a different compiler interface than those +supplied, you can write a class that implements the CompilerAdapter interface +(<code>package org.apache.tools.ant.taskdefs.compilers</code>). Supply the full +classname in the <code>build.compiler</code> property or the +<code>compiler</code> attribute. +</p> +<p>The fork attribute overrides the <code>build.compiler</code> property +or <code>compiler</code> attribute setting and +expects a JDK1.1 or higher to be set in <code>JAVA_HOME</code>. +</p> +<p>You can also use the <code>compiler</code> attribute to tell Ant +which JDK version it shall assume when it puts together the command +line switches - even if you set <code>fork="true"</code>. +This is useful if you want to run the compiler of JDK 1.1 while you +current JDK is 1.2+. If you use +<code>compiler="javac1.1"</code> and (for example) +<code>depend="true"</code> Ant will use the command line +switch <code>-depend</code> instead of <code>-Xdepend</code>.</p> +<p>This task will drop all entries that point to non-existent +files/directories from the classpath it passes to the compiler.</p> +<p>The working directory for a forked executable (if any) is the + project's base directory.</p> +<p><strong>Windows Note:</strong>When the modern compiler is used +in unforked mode on Windows, it locks up the files present in the +classpath of the <code><javac></code> task, and does not release them. +The side effect of this is that you will not be able to delete or move +those files later on in the build. The workaround is to fork when +invoking the compiler.</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 align="center" valign="top"><b>Required</b></td> + </tr> + <tr> + <td valign="top">srcdir</td> + <td valign="top">Location of the java files. (See the + <a href="#srcdirnote">note</a> below.)</td> + <td align="center" valign="top">Yes, unless nested <code><src></code> elements are present.</td> + </tr> + <tr> + <td valign="top">destdir</td> + <td valign="top">Location to store the class files.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">includes</td> + <td valign="top">Comma- or space-separated list of files (may be specified using + wildcard patterns) that must be + included; all <code>.java</code> files are included when omitted.</td> + <td valign="top" align="center">No</td> + </tr> + <tr> + <td valign="top">includesfile</td> + <td valign="top">The name of a file that contains a list of files to + include (may be specified using wildcard patterns).</td> + <td valign="top" align="center">No</td> + </tr> + <tr> + <td valign="top">excludes</td> + <td valign="top">Comma- or space-separated list of files (may be specified using + wildcard patterns) that must be excluded; no files (except default + excludes) are excluded when omitted.</td> + <td valign="top" align="center">No</td> + </tr> + <tr> + <td valign="top">excludesfile</td> + <td valign="top">The name of a file that contains a list of files to + exclude (may be specified using wildcard patterns).</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">sourcepath</td> + <td valign="top">The sourcepath to use; defaults to the value of the srcdir attribute (or nested <code><src></code> elements). + To suppress the sourcepath switch, use <code>sourcepath=""</code>.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">bootclasspath</td> + <td valign="top"> + Location of bootstrap class files. (See <a href="#bootstrap">below</a> + for using the -X and -J-X parameters for specifying + the bootstrap classpath). + </td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">classpathref</td> + <td valign="top">The classpath to use, given as a + <a href="../using.html#references">reference</a> to a path defined elsewhere.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">sourcepathref</td> + <td valign="top">The sourcepath to use, given as a + <a href="../using.html#references">reference</a> to a path defined elsewhere.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">bootclasspathref</td> + <td valign="top">Location of bootstrap class files, given as a + <a href="../using.html#references">reference</a> to a path defined elsewhere.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">extdirs</td> + <td valign="top">Location of installed extensions.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">encoding</td> + <td valign="top">Encoding of source files. (Note: gcj doesn't support + this option yet.)</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">nowarn</td> + <td valign="top">Indicates whether the <code>-nowarn</code> switch + should be passed to the compiler; defaults to <code>off</code>.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">debug</td> + <td valign="top">Indicates whether source should be compiled with + debug information; defaults to <code>off</code>. If set to + <code>off</code>, <code>-g:none</code> will be passed on the + command line for compilers that support it (for other compilers, no + command line argument will be used). If set to <code>true</code>, + the value of the <code>debuglevel</code> attribute determines the + command line argument.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">debuglevel</td> + <td valign="top">Keyword list to be appended to the <code>-g</code> + command-line switch. This will be ignored by all implementations except + <code>modern</code>, <code>classic(ver >= 1.2)</code> and <code>jikes</code>. + Legal values are <code>none</code> or a comma-separated list of the + following keywords: + <code>lines</code>, <code>vars</code>, and <code>source</code>. + If <code>debuglevel</code> is not specified, by default, + nothing will be + appended to <code>-g</code>. If <code>debug</code> is not turned on, + this attribute will be ignored. + </td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">optimize</td> + <td valign="top"> + Indicates whether source should be compiled with + optimization; defaults to <code>off</code>. <strong>Note</strong> + that this flag is just ignored by Sun's <code>javac</code> starting + with JDK 1.3 (since compile-time optimization is unnecessary). + </td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">deprecation</td> + <td valign="top">Indicates whether source should be compiled with + deprecation information; defaults to <code>off</code>.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">target</td> + <td valign="top">Generate class files for specific VM version + (e.g., <code>1.1</code> or <code>1.2</code>). <b>Note that the + default value depends on the JVM that is running Ant. In + particular, if you use JDK 1.4+ the generated classes will not be + usable for a 1.1 Java VM unless you explicitly set this attribute + to the value 1.1 (which is the default value for JDK 1.1 to + 1.3). We highly recommend to always specify this + attribute.</b><br> + A default value for this attribute can be provided using the magic + <a + href="../javacprops.html#target"><code>ant.build.javac.target</code></a> + property.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">verbose</td> + <td valign="top">Asks the compiler for verbose output; defaults to + <code>no</code>.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">depend</td> <td valign="top">Enables dependency-tracking + for compilers that support this (<code>jikes</code> and + <code>classic</code>).</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">includeAntRuntime</td> + <td valign="top">Whether to include the Ant run-time libraries in the + classpath; defaults to <code>yes</code>, unless + <a href="../sysclasspath.html"><code>build.sysclasspath</code></a> is set. + <em>It is usually best to set this to false</em> so the script's behavior is not + sensitive to the environment in which it is run.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">includeJavaRuntime</td> + <td valign="top">Whether to include the default run-time + libraries from the executing VM in the classpath; + defaults to <code>no</code>.<br/> + <b>Note:</b> In some setups the run-time libraries may be part + of the "Ant run-time libraries" so you may need to explicitly + set includeAntRuntime to false to ensure that the Java + run-time libraries are not included.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">fork</td> + <td valign="top">Whether to execute <code>javac</code> using the + JDK compiler externally; defaults to <code>no</code>.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">executable</td> + <td valign="top">Complete path to the <code>javac</code> + executable to use in case of <code>fork="yes"</code>. + Defaults to the compiler of the Java version that is currently + running Ant. Ignored if <code>fork="no"</code>.<br> + Since Ant 1.6 this attribute can also be used to specify the + path to the executable when using jikes, jvc, gcj or sj.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">memoryInitialSize</td> + <td valign="top">The initial size of the memory for the underlying VM, + if <code>javac</code> is run externally; ignored otherwise. Defaults + to the standard VM memory setting. + (Examples: <code>83886080</code>, <code>81920k</code>, or + <code>80m</code>)</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">memoryMaximumSize</td> + <td valign="top">The maximum size of the memory for the underlying VM, + if <code>javac</code> is run externally; ignored otherwise. Defaults + to the standard VM memory setting. + (Examples: <code>83886080</code>, <code>81920k</code>, or + <code>80m</code>)</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">failonerror</td> + <td valign="top">Indicates whether compilation errors + will fail the build; defaults to <code>true</code>.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">errorProperty</td> + <td valign="top"> + The property to set (to the value "true") if compilation fails. + <em>Since Ant 1.7.1</em>. + </td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">source</td> + + <td valign="top">Value of the <code>-source</code> command-line + switch; will be ignored by all implementations prior to + <code>javac1.4</code> (or <code>modern</code> when Ant is not + running in a 1.3 VM), <code>gcj</code> and <code>jikes</code>.<br> + If you use this attribute together with <code>gcj</code> + or <code>jikes</code>, you must make sure that your version + supports the <code>-source</code> (or <code>-fsource</code> for + gcj) + switch. By default, no <code>-source</code> argument will be used + at all.<br> + <b>Note that the default value depends on the JVM that is running + Ant. We highly recommend to always specify this + attribute.</b><br> + A default value for this attribute can be provided using the magic + <a + href="../javacprops.html#source"><code>ant.build.javac.source</code></a> + property.</td> + + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">compiler</td> + <td valign="top">The compiler implementation to use. + If this attribute is not set, the value of the + <code>build.compiler</code> property, if set, will be used. + Otherwise, the default compiler for the current VM will be used. + (See the above <a href="#compilervalues">list</a> of valid + compilers.)</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">listfiles</td> + <td valign="top">Indicates whether the source files to be compiled will + be listed; defaults to <code>no</code>.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">tempdir</td> + <td valign="top">Where Ant should place temporary files. + This is only used if the task is forked and the + command line args length exceeds 4k. + <em>Since Ant 1.6</em>.</td> + <td align="center" valign="top"> + No; default is <i>java.io.tmpdir</i>. + </td> + </tr> + <tr> + <td valign="top">updatedProperty</td> + <td valign="top"> + The property to set (to the value "true") + if compilation has taken place + and has been successful. + <em>Since Ant 1.7.1</em>. + </td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">includeDestClasses</td> + <td valign="top"> + This attribute controls whether to include the + destination classes directory in the classpath + given to the compiler. + The default value of this is "true" and this + means that previously compiled classes are on + the classpath for the compiler. This means that "greedy" compilers + will not recompile dependent classes that are already compiled. + In general this is a good thing as it stops the compiler + for doing unnecessary work. However, for some edge cases, + involving generics, the javac compiler + needs to compile the dependent classes to get the generics + information. One example is documented in the bug report: + <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=40776"> + Bug 40776 - a problem compiling a Java 5 project with generics</a>. + Setting the attribute to "false" will cause the compiler + to recompile dependent classes. + <em>Since Ant 1.7.1</em>. + </td> + <td align="center" valign="top">No - default is "true"</td> + </tr> + <tr> + <td valign="top">createMissingPackageInfoClass</td> + <td valign="top"> + Some package level annotations in <code>package-info.java</code> + files don't create any <code>package-info.class</code> files so + Ant would recompile the same file every time.<br/> + Starting with Ant 1.8 Ant will create an + empty <code>package-info.class</code> for + each <code>package-info.java</code> if there isn't one created + by the compiler.<br/> + In some setups this additional class causes problems and it can + be suppressed by setting this attribute to "false". + <em>Since Ant 1.8.3</em>. + </td> + <td align="center" valign="top">No - default is "true"</td> + </tr> +</table> + +<h3>Parameters specified as nested elements</h3> +<p>This task forms an implicit <a href="../Types/fileset.html">FileSet</a> and +supports most attributes of <code><fileset></code> +(<code>dir</code> becomes <code>srcdir</code>) as well as the nested +<code><include></code>, <code><exclude></code> and +<code><patternset></code> elements.</p> +<h4><code>srcdir</code>, <code>classpath</code>, <code>sourcepath</code>, +<code>bootclasspath</code> and <code>extdirs</code></h4> +<p><code><javac></code>'s <code>srcdir</code>, <code>classpath</code>, +<code>sourcepath</code>, <code>bootclasspath</code>, and +<code>extdirs</code> attributes are +<a href="../using.html#path">path-like structures</a> +and can also be set via nested +<code><src></code> (note the different name!), +<code><classpath></code>, +<code><sourcepath></code>, +<code><bootclasspath></code> and +<code><extdirs></code> elements, respectively.</p> + +<h4>compilerarg</h4> + +<p>You can specify additional command line arguments for the compiler +with nested <code><compilerarg></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">compiler</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="#compilervalues">list</a> of valid + compilers.)</td> + <td align="center">No</td> + </tr> +</table> + +<h4>compilerclasspath <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 CompilerAdapter + <em>since Ant 1.8.0</em></h4> + +<p>If a defined type implements the <code>CompilerAdapter</code> + interface a nested element of that type can be used as an + alternative to the <code>compiler</code> attribute.</p> + +<h3>Examples</h3> +<pre> <javac srcdir="${src}" + destdir="${build}" + classpath="xyz.jar" + debug="on" + source="1.4" + /></pre> +<p>compiles all <code>.java</code> files under the <code>${src}</code> +directory, and stores +the <code>.class</code> files in the <code>${build}</code> directory. +The classpath used includes <code>xyz.jar</code>, and compiling with +debug information is on. The source level is 1.4, +so you can use <code>assert</code> statements.</p> + +<pre> <javac srcdir="${src}" + destdir="${build}" + fork="true" + source="1.2" + target="1.2" + /></pre> +<p>compiles all <code>.java</code> files under the <code>${src}</code> +directory, and stores the <code>.class</code> files in the +<code>${build}</code> directory. This will fork off the javac +compiler using the default <code>javac</code> executable. +The source level is 1.2 (similar to 1.1 or 1.3) and +the class files should be runnable under JDK 1.2+ as well.</p> + +<pre> <javac srcdir="${src}" + destdir="${build}" + fork="java$$javac.exe" + source="1.5" + /></pre> +<p>compiles all <code>.java</code> files under the <code>${src}</code> +directory, and stores the <code>.class</code> files in the +<code>${build}</code> directory. This will fork off the javac +compiler, using the executable named <code>java$javac.exe</code>. Note +that the <code>$</code> sign needs to be escaped by a second one. +The source level is 1.5, so you can use generics.</p> + +<pre> <javac srcdir="${src}" + destdir="${build}" + includes="mypackage/p1/**,mypackage/p2/**" + excludes="mypackage/p1/testpackage/**" + classpath="xyz.jar" + debug="on" + /></pre> +<p>compiles <code>.java</code> files under the <code>${src}</code> +directory, and stores the +<code>.class</code> files in the <code>${build}</code> directory. +The classpath used includes <code>xyz.jar</code>, and debug information is on. +Only files under <code>mypackage/p1</code> and <code>mypackage/p2</code> are +used. All files in and below the <code>mypackage/p1/testpackage</code> +directory are excluded from compilation. +You didn't specify a source or target level, +so the actual values used will depend on which JDK you ran Ant with.</p> + +<pre> <javac srcdir="${src}:${src2}" + destdir="${build}" + includes="mypackage/p1/**,mypackage/p2/**" + excludes="mypackage/p1/testpackage/**" + classpath="xyz.jar" + debug="on" + /></pre> + +<p>is the same as the previous example, with the addition of a second +source path, defined by +the property <code>src2</code>. This can also be represented using nested +<code><src></code> elements as follows:</p> + +<pre> <javac destdir="${build}" + classpath="xyz.jar" + debug="on"> + <src path="${src}"/> + <src path="${src2}"/> + <include name="mypackage/p1/**"/> + <include name="mypackage/p2/**"/> + <exclude name="mypackage/p1/testpackage/**"/> + </javac></pre> + +<p>If you want to run the javac compiler of a different JDK, you +should tell Ant, where to find the compiler and which version of JDK +you will be using so it can choose the correct command line switches. +The following example executes a JDK 1.1 javac in a new process and +uses the correct command line switches even when Ant is running in a +Java VM of a different version:</p> + +<pre> <javac srcdir="${src}" + destdir="${build}" + fork="yes" + executable="/opt/java/jdk1.1/bin/javac" + compiler="javac1.1" + /></pre> + +<p><a name="srcdirnote"><b>Note:</b></a> +If you wish to compile only source files located in certain packages below a +common root, use the <code>include</code>/<code>exclude</code> attributes +or <code><include></code>/<code><exclude></code> nested elements +to filter for these packages. Do not include part of your package structure +in the <code>srcdir</code> attribute +(or nested <code><src></code> elements), or Ant will recompile your +source files every time you run your compile target. See the +<a href="http://ant.apache.org/faq.html#always-recompiles">Ant FAQ</a> +for additional information.</p> + +<p> +If you wish to compile only files explicitly specified and disable +javac's default searching mechanism then you can unset the sourcepath +attribute: +<pre> <javac sourcepath="" srcdir="${src}" + destdir="${build}" > + <include name="**/*.java"/> + <exclude name="**/Example.java"/> + </javac></pre> +That way the javac will compile all java source files under "${src}" +directory but skip the examples. The compiler will even produce errors if some of +the non-example files refers to them. +</p> + +<p> +If you wish to compile with a special JDK (another than the one Ant is currently using), +set the <code>executable</code> and <code>fork</code> attribute. Using <code>taskname</code> +could show in the log, that these settings are fix. +<pre> <javac srcdir="" + destdir="" + executable="path-to-java14-home/bin/javac" + fork="true" + taskname="javac1.4" /></pre> +</p> + + +<p><b>Note:</b> If you are using Ant on Windows and a new DOS window pops up +for every use of an external compiler, this may be a problem of the JDK you are +using. This problem may occur with all JDKs < 1.2.</p> + + +<p> +If you want to activate other compiler options like <i>lint</i> you could use +the <tt><compilerarg></tt> element: +<pre> <javac srcdir="${src.dir}" + destdir="${classes.dir}" + classpathref="libraries"> + <compilerarg value="-Xlint"/> + </javac> </pre> +</p> + +<p>If you want to use a custom + CompilerAdapter <code>org.example.MyAdapter</code> you can either + use the compiler attribute:</p> +<pre> +<javac srcdir="${src.dir}" + destdir="${classes.dir}" + compiler="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"/> +<javac srcdir="${src.dir}" + destdir="${classes.dir}"> + <myadapter/> +</javac> +</pre> +<p>in which case your compiler adapter can support attributes and + nested elements of its own.</p> + +<h3>Jikes Notes</h3> + +<p>You need Jikes 1.15 or later.</p> + +<p>Jikes supports some extra options, which can be set be defining +the properties shown below prior to invoking the task. The setting +for each property will be in affect for all <code><javac></code> +tasks throughout the build. +The Ant developers are aware that +this is ugly and inflexible – expect a better solution in the future. +All the options are boolean, and must be set to <code>true</code> or +<code>yes</code> to be +interpreted as anything other than false. By default, +<code>build.compiler.warnings</code> is <code>true</code>, +while all others are <code>false</code>.</p> + +<table border="1" cellpadding="2" cellspacing="0"> + <tr> + <td valign="top"><b>Property</b></td> + <td valign="top"><b>Description</b></td> + <td align="center" valign="top"><b>Default</b></td> + </tr> + <tr> + <td valign="top"> + build.compiler.emacs + </td> + <td valign="top"> + Enable emacs-compatible error messages. + </td> + <td valign="top"> + <code>false</code> + </td> + </tr> + <tr> + <td valign="top"> + build.compiler.fulldepend + </td> + <td valign="top"> + Enable full dependency checking; see<br> + the <code>+F</code> switch in the Jikes manual. + </td> + <td valign="top"> + <code>false</code> + </td> + </tr> + <tr> + <td valign="top"> + build.compiler.pedantic + </td> + <td valign="top"> + Enable pedantic warnings. + </td> + <td valign="top"> + <code>false</code> + </td> + </tr> + <tr> + <td valign="top"> + build.compiler.warnings<br> + <strong>Deprecated</strong>. Use + <code><javac></code>'s <code>nowarn</code> + attribute instead. + </td> + <td valign="top"> + Don't disable warning messages. + </td> + <td valign="top"> + <code>true</code> + </td> + </tr> +</table> + +<h3>Jvc Notes</h3> + +<p>Jvc will enable Microsoft extensions unless you set the property +<code>build.compiler.jvc.extensions</code> to false before invoking +<code><javac></code>.</p> + +<h3><a name="bootstrap">Bootstrap Options</h3> +<p> + The Sun javac compiler has a <em>bootclasspath</em> command + line option - this corresponds to the "bootclasspath" attribute/element + of the <javac> task. The Sun compiler also allows more + control over the boot classpath using the -X and -J-X attributes. + One can set these by using the <compilerarg>. Since Ant 1.6.0, + there is a shortcut to convert path references to strings that + can by used in an OS independent fashion (see + <a href="../using.html#pathshortcut">pathshortcut</a>). For example: +</p> +<pre> + <path id="lib.path.ref"> + <fileset dir="lib" includes="*.jar"/> + </path> + <javac srcdir="src" destdir="classes"> + <compilerarg arg="-Xbootclasspath/p:${toString:lib.path.ref}"/> + </javac> +</pre> + + +</p> + +<h3>OpenJDK Notes</h3> +<p> + The <a href="https://openjdk.dev.java.net/">openjdk</a> + project has provided the javac + <a href="https://openjdk.dev.java.net/compiler/">compiler</a> + as an opensource project. The output of this project is a + <code>javac.jar</code> which contains the javac compiler. + This compiler may be used with the <code><javac></code> task with + the use of a <code>-Xbootclasspath/p</code> java argument. The argument needs + to be given to the runtime system of the javac executable, so it needs + to be prepended with a "-J". For example: + +<blockquote><pre> + <property name="patched.javac.jar" + location="${my.patched.compiler}/dist/lib/javac.jar"/> + + <presetdef name="patched.javac"> + <javac fork="yes"> + <compilerarg value="-J-Xbootclasspath/p:${patched.javac.jar}"/> + </javac> + </presetdef> + + + <patched.javac srcdir="src/java" destdir="build/classes" + debug="yes"/> +</pre></blockquote> + + <h3>Note on package-info.java</h3> + <p> + <code>package-info.java</code> files were introduced in Java5 to + allow package level annotations. On compilation, if the java file + does not contain runtime annotations, there will be no .class file + for the java file. Up to <b>Ant 1.7.1</b>, when the <javac> + task is run again, the + task will try to compile the package-info java files again. + </p> + <p>With Ant 1.7.1 a different kind of logic was introduced that + involved the timestamp of the directory that would normally + contain the .class file. This logic turned out to lead to Ant not + recompiling <code>package-info.java</code> in certain setup.</p> + <p>Starting with Ant 1.8.0 Ant will create + "empty" <code>package-info.class</code> files if it compiles + a <code>package-info.java</code> and + no <code>package-info.class</code> file has been created by the + compiler itself.</p> +</body> +</html> |