." Copyright 2004-2006 Sun Microsystems, Inc.  All Rights Reserved.
." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
."
." This code is free software; you can redistribute it and/or modify it
." under the terms of the GNU General Public License version 2 only, as
." published by the Free Software Foundation.
."
." This code is distributed in the hope that it will be useful, but WITHOUT
." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
." FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
." version 2 for more details (a copy is included in the LICENSE file that
." accompanied this code).
."
." You should have received a copy of the GNU General Public License version
." 2 along with this work; if not, write to the Free Software Foundation,
." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
."
." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
." or visit www.oracle.com if you need additional information or have any
." questions.
."
.TH apt 1 "04 May 2009"
." Generated from HTML by html2man (author: Eric Armstrong)

.LP
.SH "NAME"
.LP
.LP
\f2apt\fP \- annotation processing tool
.LP
.SH "SYNOPSIS"
.LP
.LP
\f2apt [\-classpath \fP\f2classpath\fP] [\-sourcepath \f2sourcepath\fP] [\-d \f2directory\fP] [\-s \f2directory\fP] [\-factorypath \f2path\fP] [\-factory \f2class\fP] [\-print] [\-nocompile] [\-A\f2key\fP[\f2=val\fP] ...] [\f2javac option\fP] sourcefiles [@files]
.LP
.SH "PARAMETERS"
.LP
.LP
Options may be in any order. For a discussion of parameters which apply to a specific option, see OPTIONS below.
.LP
.RS 3
.TP 3
sourcefiles 
Zero or more source files to be processed. 
.TP 3
@files 
One or more files that list source files or other options 
.RE

.LP
.SH "DESCRIPTION"
.LP
.LP
The tool \f2apt\fP, annotation processing tool, includes a set of new reflective APIs and supporting infrastructure to process program annotations. The \f2apt\fP reflective APIs provide a build\-time, source\-based, read\-only view of program structure. These reflective APIs are designed to cleanly model the Java(TM) programming language's type system after the addition of generics. First, \f2apt\fP runs annotation processors that can produce new source code and other files. Next, \f2apt\fP can cause compilation of both original and generated source files, easing development. The reflective APIs and other APIs used to interact with the tool are subpackages of \f2com.sun.mirror\fP.
.LP
.LP
A fuller discussion of how the tool operates as well as instructions for developing with \f2apt\fP are in 
.na
\f4Getting Started with \fP\f4apt\fP. @
.fi
http://java.sun.com/javase/6/docs/technotes/guides/apt/GettingStarted.html
.LP
.RS 3
.TP 3
Note: 
\f2The functionality of \fP\f2apt\fP has been subsumed by the annotation\-processing infrastructure that is now part of the \f2javac(1)\fP tool and standardized for use by all Java compilers. This new infrastructure relies on the language model and annotation\-processing APIs that are now part of the Java Platform. It is recommended that new annotation processor development be based on the new APIs and the \f2javac\fP tool. 
.RE

.LP
.SH "OPTIONS"
.LP
.SS 
apt specific options
.LP
.RS 3
.TP 3
\-s dir 
Specify the directory root under which processor\-generated source files will be placed; files are placed in subdirectories based on package namespace. 
.TP 3
\-nocompile 
Do not compile source files to class files. 
.TP 3
\-print 
Print out textual representation of specified types; perform no annotation processing or compilation. 
.TP 3
\-A[key[=val]] 
Options to pass to annotation processors \-\- these are not interpreted by \f2apt\fP directly, but are made available for use by individual processors 
.TP 3
\-factorypath path 
Specify where to find annotation processor factories; if this option is used, the classpath is \f2not\fP searched for factories. 
.TP 3
\-factory classname 
Name of annotation processor factory to use; bypasses default discovery process 
.RE

.LP
.SS 
Options shared with javac
.LP
.RS 3
.TP 3
\-d dir 
Specify where to place processor and javac generated class files 
.TP 3
\-cp path or \-classpath path 
Specify where to find user class files and annotation processor factories. If \f2\-factorypath\fP is given, the classpath is not searched for factories. 
.RE

.LP
.LP
Consult the javac(1) man page for information on \f2javac\fP options.
.LP
.SH "NOTES"
.LP
.LP
The functionality of \f2apt\fP has been subsumed by the standard annotation\-processing infrastructure now offered by \f2javac\fP. Support for \f2apt\fP and its associated APIs may be discontinued in some future JDK release.
.LP
.SH "SEE ALSO"
.LP
.RS 3
.TP 2
o
javac(1), java(1) 
.RE

.LP

.LP
 
