19 .\" or visit www.oracle.com if you need additional information or have any |
19 .\" or visit www.oracle.com if you need additional information or have any |
20 .\" questions. |
20 .\" questions. |
21 .\" |
21 .\" |
22 .\" Automatically generated by Pandoc 2.3.1 |
22 .\" Automatically generated by Pandoc 2.3.1 |
23 .\" |
23 .\" |
24 .TH "JAVAC" "1" "2018" "JDK 13" "JDK Commands" |
24 .TH "JAVAC" "1" "2019" "JDK 13" "JDK Commands" |
25 .hy |
25 .hy |
26 .SH NAME |
26 .SH NAME |
27 .PP |
27 .PP |
28 javac \- read Java class and interface definitions and compile them into |
28 javac \- read Java declarations and compile them into class files |
29 bytecode and class files |
|
30 .SH SYNOPSIS |
29 .SH SYNOPSIS |
31 .PP |
30 .PP |
32 \f[CB]javac\f[R] [\f[I]options\f[R]] [\f[I]sourcefiles\f[R]] |
31 \f[CB]javac\f[R] [\f[I]options\f[R]] [\f[I]sourcefiles\-or\-classnames\f[R]] |
33 .TP |
32 .TP |
34 .B \f[I]options\f[R] |
33 .B \f[I]options\f[R] |
35 Command\-line options. |
34 Command\-line options. |
36 See \f[B]Overview of javac Options\f[R]. |
35 .RS |
37 .RS |
36 .RE |
38 .RE |
37 .TP |
39 .TP |
38 .B \f[I]sourcefiles\-or\-classnames\f[R] |
40 .B \f[I]sourcefiles\f[R] |
39 Source files to be compiled (for example, \f[CB]Shape.java\f[R]) or the |
41 One or more source files to be compiled (such as \f[CB]MyClass.java\f[R]) |
40 names of previously compiled classes to be processed for annotations |
42 or processed for annotations (such as \f[CB]MyPackage.MyClass\f[R]). |
41 (for example, \f[CB]geometry.MyShape\f[R]). |
43 .RS |
42 .RS |
44 .RE |
43 .RE |
45 .SH DESCRIPTION |
44 .SH DESCRIPTION |
46 .PP |
45 .PP |
47 The \f[CB]javac\f[R] command reads class and interface definitions, |
46 The \f[CB]javac\f[R] command reads \f[I]source files\f[R] that contain |
48 written in the Java programming language, and compiles them into |
47 module, package and type declarations written in the Java programming |
49 bytecode class files. |
48 language, and compiles them into \f[I]class files\f[R] that run on the |
50 The \f[CB]javac\f[R] command can also process annotations in Java source |
49 Java Virtual Machine. |
51 files and classes. |
50 .PP |
52 .PP |
51 The \f[CB]javac\f[R] command can also \f[B]process annotations\f[R] in Java |
53 A new launcher environment variable, \f[CB]JDK_JAVAC_OPTIONS\f[R], was |
52 source files and classes. |
54 introduced in JDK 9 that prepended its content to the command line to |
53 .PP |
55 \f[CB]javac\f[R] . |
54 Source files must have a file name extension of \f[CB]\&.java\f[R]. |
56 See \f[B]Using JDK_JAVAC_OPTIONS Environment Variable\f[R]. |
55 Class files have a file name extension of \f[CB]\&.class\f[R]. |
57 .PP |
56 Both source and class files normally have file names that identify the |
58 There are two ways to pass source code file names to \f[CB]javac\f[R]. |
57 contents. |
59 .IP \[bu] 2 |
58 For example, a class called \f[CB]Shape\f[R] would be declared in a source |
60 For a small number of source files, you can list the file names on the |
59 file called \f[CB]Shape.java\f[R], and compiled into a class file called |
|
60 \f[CB]Shape.class\f[R]. |
|
61 .PP |
|
62 There are two ways to specify source files to \f[CB]javac\f[R]: |
|
63 .IP \[bu] 2 |
|
64 For a small number of source files, you can list their file names on the |
61 command line. |
65 command line. |
62 .IP \[bu] 2 |
66 .IP \[bu] 2 |
63 For a large number of source files, you can use the |
67 For a large number of source files, you can use the |
64 \f[CB]\@\f[R]\f[I]filename\f[R] option on the \f[CB]javac\f[R] command line |
68 \f[CB]\@\f[R]\f[I]filename\f[R] option on the command line to specify an |
65 to include a file that lists the source file names. |
69 \f[I]argument file\f[R] that lists their file names. |
66 See \f[B]Standard Options\f[R] for a description of the option and |
70 See \f[B]Standard Options\f[R] for a description of the option and |
67 \f[B]javac Command\-Line Argument Files\f[R] for a description of |
71 \f[B]Command\-Line Argument Files\f[R] for a description of |
68 \f[CB]javac\f[R] argument files. |
72 \f[CB]javac\f[R] argument files. |
69 .PP |
73 .PP |
70 Source code file names must have \f[CB]\&.java\f[R] suffixes, class file |
74 The order of source files specified on the command line or in an |
71 names must have \f[CB]\&.class\f[R] suffixes, and both source and class |
75 argument file is not important. |
72 files must have root names that identify the class. |
76 \f[CB]javac\f[R] will compile the files together, as a group, and will |
73 For example, a class called \f[CB]MyClass\f[R] would be written in a |
77 automatically resolve any dependencies between the declarations in the |
74 source file called \f[CB]MyClass.java\f[R] and compiled into a bytecode |
78 various source files. |
75 class file called \f[CB]MyClass.class\f[R]. |
79 .PP |
76 .PP |
80 \f[CB]javac\f[R] expects that source files are arranged in one or more |
77 Inner class definitions produce additional class files. |
81 directory hierarchies on the file system, described in \f[B]Arrangement |
78 These class files have names that combine the inner and outer class |
82 of Source Code\f[R]. |
79 names, such as \f[CB]MyClass$MyInnerClass.class\f[R]. |
83 .PP |
80 .PP |
84 To compile a source file, \f[CB]javac\f[R] needs to find the declaration |
81 You should arrange the source files in a directory tree that reflects |
85 of every class or interface that is used, extended, or implemented by |
82 their package tree. |
86 the code in the source file. |
83 For example: |
87 This lets \f[CB]javac\f[R] check that the code has the right to access |
84 .IP \[bu] 2 |
88 those classes and interfaces. |
85 \f[B]Oracle Solaris, Linux, and OS X:\f[R] If all of your source files |
89 Rather than specifying the source files of those classes and interfaces |
86 are in \f[CB]/workspace\f[R], then put the source code for |
90 explicitly, you can use command\-line options to tell \f[CB]javac\f[R] |
87 \f[CB]com.mysoft.mypack.MyClass\f[R] in |
91 where to search for their source files. |
88 \f[CB]/workspace/com/mysoft/mypack/MyClass.java\f[R]. |
92 If you have compiled those source files previously, you can use options |
89 .IP \[bu] 2 |
93 to tell \f[CB]javac\f[R] where to search for the corresponding class |
90 \f[B]Windows:\f[R] If all of your source files are in |
94 files. |
91 \f[CB]\\workspace\f[R], then put the source code for |
95 The options, which all have names ending in "path", are described in |
92 \f[CB]com.mysoft.mypack.MyClass\f[R] in |
96 \f[B]Standard Options\f[R], and further described in \f[B]Configuring a |
93 \f[CB]\\workspace\\com\\mysoft\\mypack\\MyClass.java\f[R]. |
97 Compilation\f[R] and \f[B]Searching for Module, Package and Type |
94 .PP |
98 Declarations\f[R]. |
95 By default, the compiler puts each class file in the same directory as |
99 .PP |
96 its source file. |
100 By default, \f[CB]javac\f[R] compiles each source file to a class file in |
97 You can specify a separate destination directory with the \f[CB]\-d\f[R] |
101 the same directory as the source file. |
98 option described in \f[B]Standard Options\f[R]. |
102 However, it is recommended to specify a separate destination directory |
99 .SH PROGRAMMATIC INTERFACE |
103 with the \f[CB]\-d\f[R] option described in \f[B]Standard Options\f[R]. |
100 .PP |
104 .PP |
101 The \f[CB]javac\f[R] command supports the new Java Compiler API defined by |
105 Command\-line \f[B]options\f[R] and \f[B]environment variables\f[R] also |
102 the classes and interfaces in the \f[CB]javax.tools\f[R] package. |
106 control how \f[CB]javac\f[R] performs various tasks: |
103 .SH IMPLICITLY LOADED SOURCE FILES |
107 .IP \[bu] 2 |
104 .PP |
108 Compiling code to run on earlier releases of the JDK. |
105 To compile a set of source files, the compiler might need to implicitly |
109 .IP \[bu] 2 |
106 load additional source files. |
110 Compiling code to run under a debugger. |
107 See \f[B]Searching for Types\f[R]. |
111 .IP \[bu] 2 |
108 Such files are currently not subject to annotation processing. |
112 Checking for stylistic issues in Java source code. |
109 By default, the compiler gives a warning when annotation processing |
113 .IP \[bu] 2 |
110 occurs and any implicitly loaded source files are compiled. |
114 Checking for problems in \f[CB]javadoc\f[R] comments |
111 The \f[CB]\-implicit\f[R] option provides a way to suppress the warning. |
115 (\f[CB]/**\ ...\ */\f[R]). |
112 .SH USING JDK_JAVAC_OPTIONS ENVIRONMENT VARIABLE |
116 .IP \[bu] 2 |
|
117 Processing annotations in source files and class files. |
|
118 .IP \[bu] 2 |
|
119 Upgrading and patching modules in the compile\-time environment. |
|
120 .PP |
|
121 \f[CB]javac\f[R] supports \f[B]Compiling for Earlier Releases Of The |
|
122 Platform\f[R] and can also be invoked from Java code using one of a |
|
123 number of \f[B]APIs\f[R] |
|
124 .SH OPTIONS |
|
125 .PP |
|
126 \f[CB]javac\f[R] provides \f[B]standard options\f[R], and \f[B]extra |
|
127 options\f[R] that are either non\-standard or are for advanced use. |
|
128 .PP |
|
129 Some options take one or more arguments. |
|
130 If an argument contains spaces or other whitespace characters, the value |
|
131 should be quoted according to the conventions of the environment being |
|
132 used to invoke javac. |
|
133 If the option begins with a single dash (\f[CB]\-\f[R]) the argument |
|
134 should either directly follow the option name, or should be separated |
|
135 with a colon (\f[CB]:\f[R]) or whitespace, depending on the option. |
|
136 If the option begins with a double dash (\f[CB]\-\-\f[R]), the argument |
|
137 may be separated either by whitespace or by an equals (\f[CB]=\f[R]) |
|
138 character with no additional whitespace. |
|
139 For example, |
|
140 .IP |
|
141 .nf |
|
142 \f[CB] |
|
143 \-Aname="J.\ Duke" |
|
144 \-proc:only |
|
145 \-d\ myDirectory |
|
146 \-\-module\-version\ 3 |
|
147 \-\-module\-version=3 |
|
148 \f[R] |
|
149 .fi |
|
150 .PP |
|
151 In the following lists of options, an argument of \f[I]path\f[R] |
|
152 represents a search path, composed of a list of file system locations |
|
153 separated by the platform path separator character, (semicolon |
|
154 \f[CB];\f[R] on Windows, or colon \f[CB]:\f[R] on other systems.) Depending |
|
155 on the option, the file system locations may be directories, JAR files |
|
156 or JMOD files. |
|
157 .SS Standard Options |
|
158 .TP |
|
159 .B \f[CB]\@\f[R]\f[I]filename\f[R] |
|
160 Reads options and file names from a file. |
|
161 To shorten or simplify the \f[CB]javac\f[R] command, you can specify one |
|
162 or more files that contain arguments to the \f[CB]javac\f[R] command |
|
163 (except \f[CB]\-J\f[R] options). |
|
164 This lets you to create \f[CB]javac\f[R] commands of any length on any |
|
165 operating system. |
|
166 See \f[B]Command\-Line Argument Files\f[R]. |
|
167 .RS |
|
168 .RE |
|
169 .TP |
|
170 .B \f[CB]\-A\f[R]\f[I]key\f[R][\f[CB]=\f[R]\f[I]value\f[R]] |
|
171 Specifies options to pass to annotation processors. |
|
172 These options are not interpreted by \f[CB]javac\f[R] directly, but are |
|
173 made available for use by individual processors. |
|
174 The \f[I]key\f[R] value should be one or more identifiers separated by a |
|
175 dot (\f[CB]\&.\f[R]). |
|
176 .RS |
|
177 .RE |
|
178 .TP |
|
179 .B \f[CB]\-\-add\-modules\f[R] \f[I]module\f[R]\f[CB],\f[R]\f[I]module\f[R] |
|
180 Specifies root modules to resolve in addition to the initial modules, or |
|
181 all modules on the module path if \f[I]module\f[R] is |
|
182 \f[CB]ALL\-MODULE\-PATH.\f[R] |
|
183 .RS |
|
184 .RE |
|
185 .TP |
|
186 .B \f[CB]\-\-boot\-class\-path\f[R] \f[I]path\f[R] or \f[CB]\-bootclasspath\f[R] \f[I]path\f[R] |
|
187 Overrides the location of the bootstrap class files. |
|
188 .RS |
|
189 .PP |
|
190 \f[B]Note:\f[R] This can only be used when compiling for releases prior |
|
191 to JDK 9. |
|
192 As applicable, see the descriptions in \f[CB]\-\-release\f[R], |
|
193 \f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details. |
|
194 For JDK 9 or later, see \f[CB]\-\-system\f[R]. |
|
195 .RE |
|
196 .TP |
|
197 .B \f[CB]\-\-class\-path\f[R] \f[I]path\f[R], \f[CB]\-classpath\f[R] \f[I]path\f[R], or \f[CB]\-cp\f[R] \f[I]path\f[R] |
|
198 Specifies where to find user class files and annotation processors. |
|
199 This class path overrides the user class path in the \f[CB]CLASSPATH\f[R] |
|
200 environment variable. |
|
201 .RS |
|
202 .IP \[bu] 2 |
|
203 If \f[CB]\-\-class\-path\f[R], \f[CB]\-classpath\f[R], or \f[CB]\-cp\f[R] are |
|
204 not specified, then the user class path is the value of the |
|
205 \f[CB]CLASSPATH\f[R] environment variable, if that is set, or else the |
|
206 current directory. |
|
207 .IP \[bu] 2 |
|
208 If not compiling code for modules, if the \f[CB]\-\-source\-path\f[R] or |
|
209 \-sourcepath` option is not specified, then the user class path is also |
|
210 searched for source files. |
|
211 .IP \[bu] 2 |
|
212 If the \f[CB]\-processorpath\f[R] option is not specified, then the class |
|
213 path is also searched for annotation processors. |
|
214 .RE |
|
215 .TP |
|
216 .B \f[CB]\-d\f[R] \f[I]directory\f[R] |
|
217 Sets the destination directory (or \f[I]class output directory\f[R]) for |
|
218 class files. |
|
219 If a class is part of a package, then \f[CB]javac\f[R] puts the class file |
|
220 in a subdirectory that reflects the module name (if appropriate) and |
|
221 package name. |
|
222 The directory, and any necessary subdirectories, will be created if they |
|
223 do not already exist. |
|
224 .RS |
|
225 .PP |
|
226 If the \f[CB]\-d\f[R] option is not specified, then \f[CB]javac\f[R] puts |
|
227 each class file in the same directory as the source file from which it |
|
228 was generated. |
|
229 .PP |
|
230 Except when compiling code for multiple modules, the contents of the |
|
231 class output directory will be organized in a package hierarchy. |
|
232 When compiling code for multiple modules, the contents of the output |
|
233 directory will be organized in a module hierarchy, with the contents of |
|
234 each module in a separate subdirectory, each organized as a package |
|
235 hierarchy. |
|
236 .PP |
|
237 \f[B]Note:\f[R] When compiling code for one or more modules, the class |
|
238 output directory will automatically be checked when searching for |
|
239 previously compiled classes. |
|
240 When not compiling for modules, for backwards compatibility, the |
|
241 directory is \f[I]not\f[R] automatically checked for previously compiled |
|
242 classes, and so it is recommended to specify the class output directory |
|
243 as one of the locations on the user class path, using the |
|
244 \f[CB]\-\-class\-path\f[R] option or one of its alternate forms. |
|
245 .RE |
|
246 .TP |
|
247 .B \f[CB]\-deprecation\f[R] |
|
248 Shows a description of each use or override of a deprecated member or |
|
249 class. |
|
250 Without the \f[CB]\-deprecation\f[R] option, \f[CB]javac\f[R] shows a |
|
251 summary of the source files that use or override deprecated members or |
|
252 classes. |
|
253 The \f[CB]\-deprecation\f[R] option is shorthand for |
|
254 \f[CB]\-Xlint:deprecation\f[R]. |
|
255 .RS |
|
256 .RE |
|
257 .TP |
|
258 .B \f[CB]\-\-enable\-preview\f[R] |
|
259 Enables preview language features. |
|
260 Used in conjunction with either \f[CB]\-source\f[R] or |
|
261 \f[CB]\-\-release\f[R]. |
|
262 .RS |
|
263 .RE |
|
264 .TP |
|
265 .B \f[CB]\-encoding\f[R] \f[I]encoding\f[R] |
|
266 Specifies character encoding used by source files, such as EUC\-JP and |
|
267 UTF\-8. |
|
268 If the \f[CB]\-encoding\f[R] option is not specified, then the platform |
|
269 default converter is used. |
|
270 .RS |
|
271 .RE |
|
272 .TP |
|
273 .B \f[CB]\-endorseddirs\f[R] \f[I]directories\f[R] |
|
274 Overrides the location of the endorsed standards path. |
|
275 .RS |
|
276 .PP |
|
277 \f[B]Note:\f[R] This can only be used when compiling for releases prior |
|
278 to JDK 9. |
|
279 As applicable, see the descriptions in \f[CB]\-\-release\f[R], |
|
280 \f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details. |
|
281 .RE |
|
282 .TP |
|
283 .B \f[CB]\-extdirs\f[R] \f[I]directories\f[R] |
|
284 Overrides the location of the installed extensions. |
|
285 \f[CB]directories\f[R] is a list of directories, separated by the platform |
|
286 path separator (\f[CB];\f[R] on Windows, and \f[CB]:\f[R] otherwise). |
|
287 Each JAR file in the specified directories is searched for class files. |
|
288 All JAR files found become part of the class path. |
|
289 .RS |
|
290 .PP |
|
291 If you are compiling for a release of the platform that supports the |
|
292 Extension Mechanism, then this option specifies the directories that |
|
293 contain the extension classes. |
|
294 See [Compiling for Other Releases of the Platform]. |
|
295 .PP |
|
296 \f[B]Note:\f[R] This can only be used when compiling for releases prior |
|
297 to JDK 9. |
|
298 As applicable, see the descriptions in \f[CB]\-\-release\f[R], |
|
299 \f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details. |
|
300 .RE |
|
301 .TP |
|
302 .B \f[CB]\-g\f[R] |
|
303 Generates all debugging information, including local variables. |
|
304 By default, only line number and source file information is generated. |
|
305 .RS |
|
306 .RE |
|
307 .TP |
|
308 .B \f[CB]\-g:\f[R][\f[CB]lines\f[R], \f[CB]vars\f[R], \f[CB]source\f[R]] |
|
309 Generates only the kinds of debugging information specified by the |
|
310 comma\-separated list of keywords. |
|
311 Valid keywords are: |
|
312 .RS |
|
313 .TP |
|
314 .B \f[CB]lines\f[R] |
|
315 Line number debugging information. |
|
316 .RS |
|
317 .RE |
|
318 .TP |
|
319 .B \f[CB]vars\f[R] |
|
320 Local variable debugging information. |
|
321 .RS |
|
322 .RE |
|
323 .TP |
|
324 .B \f[CB]source\f[R] |
|
325 Source file debugging information. |
|
326 .RS |
|
327 .RE |
|
328 .RE |
|
329 .TP |
|
330 .B \f[CB]\-g:none\f[R] |
|
331 Does not generate debugging information. |
|
332 .RS |
|
333 .RE |
|
334 .TP |
|
335 .B \f[CB]\-h\f[R] \f[I]directory\f[R] |
|
336 Specifies where to place generated native header files. |
|
337 .RS |
|
338 .PP |
|
339 When you specify this option, a native header file is generated for each |
|
340 class that contains native methods or that has one or more constants |
|
341 annotated with the \f[B]\f[BC]java.lang.annotation.Native\f[B]\f[R] |
|
342 annotation. |
|
343 If the class is part of a package, then the compiler puts the native |
|
344 header file in a subdirectory that reflects the module name (if |
|
345 appropriate) and package name. |
|
346 The directory, and any necessary subdirectories, will be created if they |
|
347 do not already exist. |
|
348 .RE |
|
349 .TP |
|
350 .B \f[CB]\-\-help\f[R], \f[CB]\-help\f[R] or \f[CB]\-?\f[R] |
|
351 Prints a synopsis of the standard options. |
|
352 .RS |
|
353 .RE |
|
354 .TP |
|
355 .B \f[CB]\-\-help\-extra\f[R] or \f[CB]\-X\f[R] |
|
356 Prints a synopsis of the set of extra options. |
|
357 .RS |
|
358 .RE |
|
359 .TP |
|
360 .B \f[CB]\-implicit:\f[R][\f[CB]none\f[R], \f[CB]class\f[R]] |
|
361 Specifies whether or not to generate class files for implicitly |
|
362 referenced files: |
|
363 .RS |
|
364 .IP \[bu] 2 |
|
365 \f[CB]\-implicit:class\f[R] \-\-\- Automatically generates class files. |
|
366 .IP \[bu] 2 |
|
367 \f[CB]\-implicit:none\f[R] \-\-\- Suppresses class file generation. |
|
368 .PP |
|
369 If this option is not specified, then the default automatically |
|
370 generates class files. |
|
371 In this case, the compiler issues a warning if any class files are |
|
372 generated when also doing annotation processing. |
|
373 The warning is not issued when the \f[CB]\-implicit\f[R] option is |
|
374 explicitly set. |
|
375 See \f[B]Searching for Module, Package and Type Declarations\f[R]. |
|
376 .RE |
|
377 .TP |
|
378 .B \f[CB]\-J\f[R]\f[I]option\f[R] |
|
379 Passes \f[I]option\f[R] to the runtime system, where \f[I]option\f[R] is |
|
380 one of the Java options described on \f[B]java\f[R] command. |
|
381 For example, \f[CB]\-J\-Xms48m\f[R] sets the startup memory to 48 MB. |
|
382 .RS |
|
383 .PP |
|
384 \f[B]Note:\f[R] The \f[CB]CLASSPATH\f[R] environment variable, |
|
385 \f[CB]\-classpath\f[R] option, \f[CB]\-bootclasspath\f[R] option, and |
|
386 \f[CB]\-extdirs\f[R] option do not specify the classes used to run |
|
387 \f[CB]javac\f[R]. |
|
388 Trying to customize the compiler implementation with these options and |
|
389 variables is risky and often does not accomplish what you want. |
|
390 If you must customize the compiler implementation, then use the |
|
391 \f[CB]\-J\f[R] option to pass options through to the underlying Java |
|
392 launcher. |
|
393 .RE |
|
394 .TP |
|
395 .B \f[CB]\-\-limit\-modules\f[R] \f[I]module\f[R]\f[CB],\f[R]\f[I]module\f[R]* |
|
396 Limits the universe of observable modules. |
|
397 .RS |
|
398 .RE |
|
399 .TP |
|
400 .B \f[CB]\-\-module\f[R] \f[I]module\-name\f[R] (\f[CB],\f[R]\f[I]module\-name\f[R])* or \f[CB]\-m\f[R] \f[I]module\-name\f[R] (\f[CB],\f[R]\f[I]module\-name\f[R])* |
|
401 Compiles those source files in the named modules that are newer than the |
|
402 corresponding files in the output directory. |
|
403 .RS |
|
404 .RE |
|
405 .TP |
|
406 .B \f[CB]\-\-module\-path\f[R] \f[I]path\f[R] or \f[CB]\-p\f[R] \f[I]path\f[R] |
|
407 Specifies where to find application modules. |
|
408 .RS |
|
409 .RE |
|
410 .TP |
|
411 .B \f[CB]\-\-module\-source\-path\f[R] \f[I]module\-source\-path\f[R] |
|
412 Specifies where to find source files when compiling code in multiple |
|
413 modules. |
|
414 See [Compilation Modes] and \f[B]The Module Source Path Option\f[R]. |
|
415 .RS |
|
416 .RE |
|
417 .TP |
|
418 .B \f[CB]\-\-module\-version\f[R] \f[I]version\f[R] |
|
419 Specifies the version of modules that are being compiled. |
|
420 .RS |
|
421 .RE |
|
422 .TP |
|
423 .B \f[CB]\-nowarn\f[R] |
|
424 Disables warning messages. |
|
425 This option operates the same as the \f[CB]\-Xlint:none\f[R] option. |
|
426 .RS |
|
427 .RE |
|
428 .TP |
|
429 .B \f[CB]\-parameters\f[R] |
|
430 Generates metadata for reflection on method parameters. |
|
431 Stores formal parameter names of constructors and methods in the |
|
432 generated class file so that the method |
|
433 \f[CB]java.lang.reflect.Executable.getParameters\f[R] from the Reflection |
|
434 API can retrieve them. |
|
435 .RS |
|
436 .RE |
|
437 .TP |
|
438 .B \f[CB]\-proc:\f[R][\f[CB]none\f[R], \f[CB]only\f[R]] |
|
439 Controls whether annotation processing and compilation are done. |
|
440 \f[CB]\-proc:none\f[R] means that compilation takes place without |
|
441 annotation processing. |
|
442 \f[CB]\-proc:only\f[R] means that only annotation processing is done, |
|
443 without any subsequent compilation. |
|
444 .RS |
|
445 .RE |
|
446 .TP |
|
447 .B \f[CB]\-processor\f[R] \f[I]class1\f[R][\f[CB],\f[R]\f[I]class2\f[R]\f[CB],\f[R]\f[I]class3\f[R]...] |
|
448 Names of the annotation processors to run. |
|
449 This bypasses the default discovery process. |
|
450 .RS |
|
451 .RE |
|
452 .TP |
|
453 .B \f[CB]\-\-processor\-module\-path\f[R] \f[I]path\f[R] |
|
454 Specifies the module path used for finding annotation processors. |
|
455 .RS |
|
456 .RE |
|
457 .TP |
|
458 .B \f[CB]\-\-processor\-path\f[R] \f[I]path\f[R] or \f[CB]\-processorpath\f[R] \f[I]path\f[R] |
|
459 Specifies where to find annotation processors. |
|
460 If this option is not used, then the class path is searched for |
|
461 processors. |
|
462 .RS |
|
463 .RE |
|
464 .TP |
|
465 .B \f[CB]\-profile\f[R] \f[I]profile\f[R] |
|
466 Checks that the API used is available in the specified profile. |
|
467 .RS |
|
468 .PP |
|
469 \f[B]Note:\f[R] This can only be used when compiling for releases prior |
|
470 to JDK 9. |
|
471 As applicable, see the descriptions in \f[CB]\-\-release\f[R], |
|
472 \f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details. |
|
473 .RE |
|
474 .TP |
|
475 .B \f[CB]\-\-release\f[R] \f[I]release\f[R] |
|
476 Compiles source code according to the rules of the Java programming |
|
477 language for the specified Java SE release, generating class files which |
|
478 target that release. |
|
479 Source code is compiled against the combined Java SE and JDK API for the |
|
480 specified release. |
|
481 .RS |
|
482 .PP |
|
483 The supported values of \f[I]release\f[R] are the current Java SE release |
|
484 and a limited number of previous releases, detailed in the command\-line |
|
485 help. |
|
486 .PP |
|
487 For the current release, the Java SE API consists of the |
|
488 \f[CB]java.*\f[R], \f[CB]javax.*\f[R], and \f[CB]org.*\f[R] packages that are |
|
489 exported by the Java SE modules in the release; the JDK API consists of |
|
490 the \f[CB]com.*\f[R] and \f[CB]jdk.*\f[R] packages that are exported by the |
|
491 JDK modules in the release, plus the \f[CB]javax.*\f[R] packages that are |
|
492 exported by standard, but non\-Java SE, modules in the release. |
|
493 .PP |
|
494 For previous releases, the Java SE API and the JDK API are as defined in |
|
495 that release. |
|
496 .PP |
|
497 \f[B]Note:\f[R] When using \f[CB]\-\-release\f[R], you cannot also use the |
|
498 \f[CB]\-\-source\f[R]/\f[CB]\-source\f[R] or |
|
499 \f[CB]\-\-target\f[R]/\f[CB]\-target\f[R] options. |
|
500 .PP |
|
501 \f[B]Note:\f[R] When using \f[CB]\-\-release\f[R] to specify a release that |
|
502 supports the Java Platform Module System, the \f[CB]\-\-add\-exports\f[R] |
|
503 option cannot be used to enlarge the set of packages exported by the |
|
504 Java SE, JDK, and standard modules in the specified release. |
|
505 .RE |
|
506 .TP |
|
507 .B \f[CB]\-s\f[R] \f[I]directory\f[R] |
|
508 Specifies the directory used to place the generated source files. |
|
509 If a class is part of a package, then the compiler puts the source file |
|
510 in a subdirectory that reflects the module name (if appropriate) and |
|
511 package name. |
|
512 The directory, and any necessary subdirectories, will be created if they |
|
513 do not already exist. |
|
514 .RS |
|
515 .PP |
|
516 Except when compiling code for multiple modules, the contents of the |
|
517 source output directory will be organized in a package hierarchy. |
|
518 When compiling code for multiple modules, the contents of the source |
|
519 output directory will be organized in a module hierarchy, with the |
|
520 contents of each module in a separate subdirectory, each organized as a |
|
521 package hierarchy. |
|
522 .RE |
|
523 .TP |
|
524 .B \f[CB]\-\-source\f[R] \f[I]release\f[R] or \f[CB]\-source\f[R] \f[I]release\f[R] |
|
525 Compiles source code according to the rules of the Java programming |
|
526 language for the specified Java SE release. |
|
527 The supported values of \f[I]release\f[R] are the current Java SE release |
|
528 and a limited number of previous releases, detailed in the command\-line |
|
529 help. |
|
530 .RS |
|
531 .PP |
|
532 If the option is not specified, the default is to compile source code |
|
533 according to the rules of the Java programming language for the current |
|
534 Java SE release. |
|
535 .RE |
|
536 .TP |
|
537 .B \f[CB]\-\-source\-path\f[R] \f[I]path\f[R] or \f[CB]\-sourcepath\f[R] \f[I]path\f[R] |
|
538 Specifies where to find source files. |
|
539 Except when compiling multiple modules together, this is the source code |
|
540 path used to search for class or interface definitions. |
|
541 .RS |
|
542 .PP |
|
543 \f[B]Note:\f[R] Classes found through the class path might be recompiled |
|
544 when their source files are also found. |
|
545 See \f[B]Searching for Module, Package and Type Declarations\f[R]. |
|
546 .RE |
|
547 .TP |
|
548 .B \f[CB]\-\-system\f[R] \f[I]jdk\f[R] | \f[CB]none\f[R] |
|
549 Overrides the location of system modules. |
|
550 .RS |
|
551 .RE |
|
552 .TP |
|
553 .B \f[CB]\-\-target\f[R] \f[I]release\f[R] or \f[CB]\-target\f[R] \f[I]release\f[R] |
|
554 Generates \f[CB]class\f[R] files suitable for the specified Java SE |
|
555 release. |
|
556 The supported values of \f[I]release\f[R] are the current Java SE release |
|
557 and a limited number of previous releases, detailed in the command\-line |
|
558 help. |
|
559 .RS |
|
560 .PP |
|
561 \f[B]Note:\f[R] The target release must be equal to or higher than the |
|
562 source release. |
|
563 (See \f[CB]\-\-source\f[R].) |
|
564 .RE |
|
565 .TP |
|
566 .B \f[CB]\-\-upgrade\-module\-path\f[R] \f[I]path\f[R] |
|
567 Overrides the location of upgradeable modules. |
|
568 .RS |
|
569 .RE |
|
570 .TP |
|
571 .B \f[CB]\-verbose\f[R] |
|
572 Outputs messages about what the compiler is doing. |
|
573 Messages include information about each class loaded and each source |
|
574 file compiled. |
|
575 .RS |
|
576 .RE |
|
577 .TP |
|
578 .B \f[CB]\-\-version\f[R] or \f[CB]\-version\f[R] |
|
579 Prints version information. |
|
580 .RS |
|
581 .RE |
|
582 .TP |
|
583 .B \f[CB]\-Werror\f[R] |
|
584 Terminates compilation when warnings occur. |
|
585 .RS |
|
586 .RE |
|
587 .SS Extra Options |
|
588 .TP |
|
589 .B \f[CB]\-\-add\-exports\f[R] \f[I]module\f[R]\f[CB]/\f[R]\f[I]package\f[R]\f[CB]=\f[R]\f[I]other\-module\f[R](\f[CB],\f[R]\f[I]other\-module\f[R])* |
|
590 Specifies a package to be considered as exported from its defining |
|
591 module to additional modules or to all unnamed modules when the value of |
|
592 \f[I]other\-module\f[R] is \f[CB]ALL\-UNNAMED\f[R]. |
|
593 .RS |
|
594 .RE |
|
595 .TP |
|
596 .B \f[CB]\-\-add\-reads\f[R] \f[I]module\f[R]\f[CB]=\f[R]\f[I]other\-module\f[R](\f[CB],\f[R]\f[I]other\-module\f[R])* |
|
597 Specifies additional modules to be considered as required by a given |
|
598 module. |
|
599 .RS |
|
600 .RE |
|
601 .TP |
|
602 .B \f[CB]\-\-default\-module\-for\-created\-files\f[R] \f[I]module\-name\f[R] |
|
603 Specifies the fallback target module for files created by annotation |
|
604 processors, if none is specified or inferred. |
|
605 .RS |
|
606 .RE |
|
607 .TP |
|
608 .B \f[CB]\-Djava.endorsed.dirs=\f[R]\f[I]dirs\f[R] |
|
609 Overrides the location of the endorsed standards path. |
|
610 .RS |
|
611 .PP |
|
612 \f[B]Note:\f[R] This can only be used when compiling for releases prior |
|
613 to JDK 9. |
|
614 As applicable, see the descriptions in \f[CB]\-\-release\f[R], |
|
615 \f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details. |
|
616 .RE |
|
617 .TP |
|
618 .B \f[CB]\-Djava.ext.dirs=\f[R]\f[I]dirs\f[R] |
|
619 Overrides the location of installed extensions. |
|
620 .RS |
|
621 .PP |
|
622 \f[B]Note:\f[R] This can only be used when compiling for releases prior |
|
623 to JDK 9. |
|
624 As applicable, see the descriptions in \f[CB]\-\-release\f[R], |
|
625 \f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details. |
|
626 .RE |
|
627 .TP |
|
628 .B \f[CB]\-\-doclint\-format\f[R] [\f[CB]html4\f[R]|\f[CB]html5\f[R]] |
|
629 Specifies the format for documentation comments. |
|
630 .RS |
|
631 .RE |
|
632 .TP |
|
633 .B \f[CB]\-\-patch\-module\f[R] \f[I]module\f[R]\f[CB]=\f[R]\f[I]path\f[R] |
|
634 Overrides or augments a module with classes and resources in JAR files |
|
635 or directories. |
|
636 .RS |
|
637 .RE |
|
638 .TP |
|
639 .B \f[CB]\-Xbootclasspath:\f[R]\f[I]path\f[R] |
|
640 Overrides the location of the bootstrap class files. |
|
641 .RS |
|
642 .PP |
|
643 \f[B]Note:\f[R] This can only be used when compiling for releases prior |
|
644 to JDK 9. |
|
645 As applicable, see the descriptions in \f[CB]\-\-release\f[R], |
|
646 \f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details. |
|
647 .RE |
|
648 .TP |
|
649 .B \f[CB]\-Xbootclasspath/a:\f[R]\f[I]path\f[R] |
|
650 Adds a suffix to the bootstrap class path. |
|
651 .RS |
|
652 .PP |
|
653 \f[B]Note:\f[R] This can only be used when compiling for releases prior |
|
654 to JDK 9. |
|
655 As applicable, see the descriptions in \f[CB]\-\-release\f[R], |
|
656 \f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details. |
|
657 .RE |
|
658 .TP |
|
659 .B \f[CB]\-Xbootclasspath/p:\f[R]\f[I]path\f[R] |
|
660 Adds a prefix to the bootstrap class path. |
|
661 .RS |
|
662 .PP |
|
663 \f[B]Note:\f[R] This can only be used when compiling for releases prior |
|
664 to JDK 9. |
|
665 As applicable, see the descriptions in \f[CB]\-\-release\f[R], |
|
666 \f[CB]\-source\f[R], or \f[CB]\-target\f[R] for details. |
|
667 .RE |
|
668 .TP |
|
669 .B \f[CB]\-Xdiags:\f[R][\f[CB]compact\f[R], \f[CB]verbose\f[R]] |
|
670 Selects a diagnostic mode. |
|
671 .RS |
|
672 .RE |
|
673 .TP |
|
674 .B \f[CB]\-Xdoclint\f[R] |
|
675 Enables recommended checks for problems in \f[CB]javadoc\f[R] comments |
|
676 .RS |
|
677 .RE |
|
678 .TP |
|
679 .B \f[CB]\-Xdoclint:\f[R](\f[CB]all\f[R]|\f[CB]none\f[R]|[\f[CB]\-\f[R]]\f[I]group\f[R])[\f[CB]/\f[R]\f[I]access\f[R]] |
|
680 Enables or disables specific groups of checks, |
|
681 .RS |
|
682 .PP |
|
683 \f[I]group\f[R] can have one of the following values: |
|
684 .IP \[bu] 2 |
|
685 \f[CB]accessibility\f[R] |
|
686 .IP \[bu] 2 |
|
687 \f[CB]html\f[R] |
|
688 .IP \[bu] 2 |
|
689 \f[CB]missing\f[R] |
|
690 .IP \[bu] 2 |
|
691 \f[CB]reference\f[R] |
|
692 .IP \[bu] 2 |
|
693 \f[CB]syntax\f[R] |
|
694 .PP |
|
695 The variable \f[I]access\f[R] specifies the minimum visibility level of |
|
696 classes and members that the \f[CB]\-Xdoclint\f[R] option checks. |
|
697 It can have one of the following values (in order of most to least |
|
698 visible): |
|
699 .IP \[bu] 2 |
|
700 \f[CB]public\f[R] |
|
701 .IP \[bu] 2 |
|
702 \f[CB]protected\f[R] |
|
703 .IP \[bu] 2 |
|
704 \f[CB]package\f[R] |
|
705 .IP \[bu] 2 |
|
706 \f[CB]private\f[R] |
|
707 .PP |
|
708 The default \f[I]access\f[R] level is \f[CB]private\f[R]. |
|
709 .PP |
|
710 For more information about these groups of checks, see the |
|
711 \f[CB]\-Xdoclint\f[R] option of the \f[CB]javadoc\f[R] command. |
|
712 The \f[CB]\-Xdoclint\f[R] option is disabled by default in the |
|
713 \f[CB]javac\f[R] command. |
|
714 .PP |
|
715 For example, the following option checks classes and members (with all |
|
716 groups of checks) that have the access level of protected and higher |
|
717 (which includes protected and public): |
|
718 .RS |
|
719 .PP |
|
720 \f[CB]\-Xdoclint:all/protected\f[R] |
|
721 .RE |
|
722 .PP |
|
723 The following option enables all groups of checks for all access levels, |
|
724 except it will not check for HTML errors for classes and members that |
|
725 have the access level of package and higher (which includes package, |
|
726 protected and public): |
|
727 .RS |
|
728 .PP |
|
729 \f[CB]\-Xdoclint:all,\-html/package\f[R] |
|
730 .RE |
|
731 .RE |
|
732 .TP |
|
733 .B \f[CB]\-Xdoclint/package:\f[R][\f[CB]\-\f[R]]\f[I]packages\f[R](\f[CB],\f[R][\f[CB]\-\f[R]]\f[I]package\f[R])* |
|
734 Enables or disables checks in specific packages. |
|
735 Each \f[I]package\f[R] is either the qualified name of a package or a |
|
736 package name prefix followed by \f[CB]\&.*\f[R], which expands to all |
|
737 sub\-packages of the given package. |
|
738 Each \f[I]package\f[R] can be prefixed with a hyphen (\f[CB]\-\f[R]) to |
|
739 disable checks for a specified package or packages. |
|
740 .RS |
|
741 .RE |
|
742 .TP |
|
743 .B \f[CB]\-Xlint\f[R] |
|
744 Enables all recommended warnings. |
|
745 In this release, enabling all available warnings is recommended. |
|
746 .RS |
|
747 .RE |
|
748 .TP |
|
749 .B \f[CB]\-Xlint:\f[R][\f[CB]\-\f[R]]\f[I]key\f[R](\f[CB],\f[R][\f[CB]\-\f[R]]\f[I]key\f[R])* |
|
750 Supplies warnings to enable or disable, separated by comma. |
|
751 Precede a key by a hyphen (\f[CB]\-\f[R]) to disable the specified |
|
752 warning. |
|
753 .RS |
|
754 .PP |
|
755 Supported values for \f[I]key\f[R] are: |
|
756 .IP \[bu] 2 |
|
757 \f[CB]all\f[R]: Enables all warnings. |
|
758 .IP \[bu] 2 |
|
759 \f[CB]auxiliaryclass\f[R]: Warns about an auxiliary class that\[aq]s |
|
760 hidden in a source file, and is used from other files. |
|
761 .IP \[bu] 2 |
|
762 \f[CB]cast\f[R]: Warns about the use of unnecessary casts. |
|
763 .IP \[bu] 2 |
|
764 \f[CB]classfile\f[R]: Warns about the issues related to classfile |
|
765 contents. |
|
766 .IP \[bu] 2 |
|
767 \f[CB]deprecation\f[R]: Warns about the use of deprecated items. |
|
768 .IP \[bu] 2 |
|
769 \f[CB]dep\-ann\f[R]: Warns about the items marked as deprecated in |
|
770 \f[CB]javadoc\f[R] but without the \f[CB]\@Deprecated\f[R] annotation. |
|
771 .IP \[bu] 2 |
|
772 \f[CB]divzero\f[R]: Warns about the division by the constant integer 0. |
|
773 .IP \[bu] 2 |
|
774 \f[CB]empty\f[R]: Warns about an empty statement after \f[CB]if\f[R]. |
|
775 .IP \[bu] 2 |
|
776 \f[CB]exports\f[R]: Warns about the issues regarding module exports. |
|
777 .IP \[bu] 2 |
|
778 \f[CB]fallthrough\f[R]: Warns about the falling through from one case of a |
|
779 switch statement to the next. |
|
780 .IP \[bu] 2 |
|
781 \f[CB]finally\f[R]: Warns about \f[CB]finally\f[R] clauses that do not |
|
782 terminate normally. |
|
783 .IP \[bu] 2 |
|
784 \f[CB]module\f[R]: Warns about the module system\-related issues. |
|
785 .IP \[bu] 2 |
|
786 \f[CB]opens\f[R]: Warns about the issues related to module opens. |
|
787 .IP \[bu] 2 |
|
788 \f[CB]options\f[R]: Warns about the issues relating to use of command line |
|
789 options. |
|
790 .IP \[bu] 2 |
|
791 \f[CB]overloads\f[R]: Warns about the issues related to method overloads. |
|
792 .IP \[bu] 2 |
|
793 \f[CB]overrides\f[R]: Warns about the issues related to method overrides. |
|
794 .IP \[bu] 2 |
|
795 \f[CB]path\f[R]: Warns about the invalid path elements on the command l |
|
796 ine. |
|
797 .IP \[bu] 2 |
|
798 \f[CB]processing\f[R]: Warns about the issues related to annotation |
|
799 processing. |
|
800 .IP \[bu] 2 |
|
801 \f[CB]rawtypes\f[R]: Warns about the use of raw types. |
|
802 .IP \[bu] 2 |
|
803 \f[CB]removal\f[R]: Warns about the use of an API that has been marked for |
|
804 removal. |
|
805 .IP \[bu] 2 |
|
806 \f[CB]requires\-automatic\f[R]: Warns developers about the use of |
|
807 automatic modules in requires clauses. |
|
808 .IP \[bu] 2 |
|
809 \f[CB]requires\-transitive\-automatic\f[R]: Warns about automatic modules |
|
810 in requires transitive. |
|
811 .IP \[bu] 2 |
|
812 \f[CB]serial\f[R]: Warns about the serializable classes that do not |
|
813 provide a serial version ID. |
|
814 Also warns about access to non\-public members from a serializable |
|
815 element. |
|
816 .IP \[bu] 2 |
|
817 \f[CB]static\f[R]: Warns about the accessing a static member using an |
|
818 instance. |
|
819 .IP \[bu] 2 |
|
820 \f[CB]try\f[R]: Warns about the issues relating to the use of try blocks ( |
|
821 that is, try\-with\-resources). |
|
822 .IP \[bu] 2 |
|
823 \f[CB]unchecked\f[R]: Warns about the unchecked operations. |
|
824 .IP \[bu] 2 |
|
825 \f[CB]varargs\f[R]: Warns about the potentially unsafe \f[CB]vararg\f[R] |
|
826 methods. |
|
827 .IP \[bu] 2 |
|
828 \f[CB]none\f[R]: Disables all warnings. |
|
829 .PP |
|
830 See \f[B]Examples of Using \-Xlint keys\f[R]. |
|
831 .RE |
|
832 .TP |
|
833 .B \f[CB]\-Xmaxerrs\f[R] \f[I]number\f[R] |
|
834 Sets the maximum number of errors to print. |
|
835 .RS |
|
836 .RE |
|
837 .TP |
|
838 .B \f[CB]\-Xmaxwarns\f[R] \f[I]number\f[R] |
|
839 Sets the maximum number of warnings to print. |
|
840 .RS |
|
841 .RE |
|
842 .TP |
|
843 .B \f[CB]\-Xpkginfo:\f[R][\f[CB]always\f[R], \f[CB]legacy\f[R], \f[CB]nonempty\f[R]] |
|
844 Specifies when and how the \f[CB]javac\f[R] command generates |
|
845 \f[CB]package\-info.class\f[R] files from \f[CB]package\-info.java\f[R] |
|
846 files using one of the following options: |
|
847 .RS |
|
848 .TP |
|
849 .B \f[CB]always\f[R] |
|
850 Generates a \f[CB]package\-info.class\f[R] file for every |
|
851 \f[CB]package\-info.java\f[R] file. |
|
852 This option may be useful if you use a build system such as Ant, which |
|
853 checks that each \f[CB]\&.java\f[R] file has a corresponding |
|
854 \f[CB]\&.class\f[R] file. |
|
855 .RS |
|
856 .RE |
|
857 .TP |
|
858 .B \f[CB]legacy\f[R] |
|
859 Generates a \f[CB]package\-info.class\f[R] file only if |
|
860 \f[CB]package\-info.java\f[R] contains annotations. |
|
861 This option does not generate a \f[CB]package\-info.class\f[R] file if |
|
862 \f[CB]package\-info.java\f[R] contains only comments. |
|
863 .RS |
|
864 .PP |
|
865 \f[B]Note:\f[R] A \f[CB]package\-info.class\f[R] file might be generated |
|
866 but be empty if all the annotations in the \f[CB]package\-info.java\f[R] |
|
867 file have \f[CB]RetentionPolicy.SOURCE\f[R]. |
|
868 .RE |
|
869 .TP |
|
870 .B \f[CB]nonempty\f[R] |
|
871 Generates a \f[CB]package\-info.class\f[R] file only if |
|
872 \f[CB]package\-info.java\f[R] contains annotations with |
|
873 \f[CB]RetentionPolicy.CLASS\f[R] or \f[CB]RetentionPolicy.RUNTIME\f[R]. |
|
874 .RS |
|
875 .RE |
|
876 .RE |
|
877 .TP |
|
878 .B \f[CB]\-Xplugin:\f[R]\f[I]name\f[R] \f[I]args\f[R] |
|
879 Specifies the name and optional arguments for a plug\-in to be run. |
|
880 If \f[I]args\f[R] are provided, \f[I]name\f[R] and \f[I]args\f[R] should be |
|
881 quoted or otherwise escape the whitespace characters between the name |
|
882 and all the arguments. |
|
883 For details on the API for a plugin, see the API documentation for |
|
884 \f[B]jdk.compiler/com.sun.source.util.Plugin\f[R]. |
|
885 .RS |
|
886 .RE |
|
887 .TP |
|
888 .B \f[CB]\-Xprefer:\f[R][\f[CB]source\f[R], \f[CB]newer\f[R]] |
|
889 Specifies which file to read when both a source file and class file are |
|
890 found for an implicitly compiled class using one of the following |
|
891 options. |
|
892 See \f[B]Searching for Module, Package and Type Declarations\f[R]. |
|
893 .RS |
|
894 .IP \[bu] 2 |
|
895 \f[CB]\-Xprefer:newer\f[R]: Reads the newer of the source or class files |
|
896 for a type (default). |
|
897 .IP \[bu] 2 |
|
898 \f[CB]\-Xprefer:source\f[R] : Reads the source file. |
|
899 Use \f[CB]\-Xprefer:source\f[R] when you want to be sure that any |
|
900 annotation processors can access annotations declared with a retention |
|
901 policy of \f[CB]SOURCE\f[R]. |
|
902 .RE |
|
903 .TP |
|
904 .B \f[CB]\-Xprint\f[R] |
|
905 Prints a textual representation of specified types for debugging |
|
906 purposes. |
|
907 This does not perform annotation processing or compilation. |
|
908 The format of the output could change. |
|
909 .RS |
|
910 .RE |
|
911 .TP |
|
912 .B \f[CB]\-XprintProcessorInfo\f[R] |
|
913 Prints information about which annotations a processor is asked to |
|
914 process. |
|
915 .RS |
|
916 .RE |
|
917 .TP |
|
918 .B \f[CB]\-XprintRounds\f[R] |
|
919 Prints information about initial and subsequent annotation processing |
|
920 rounds. |
|
921 .RS |
|
922 .RE |
|
923 .TP |
|
924 .B \f[CB]\-Xstdout\f[R] \f[I]filename\f[R] |
|
925 Sends compiler messages to the named file. |
|
926 By default, compiler messages go to \f[CB]System.err\f[R]. |
|
927 .RS |
|
928 .RE |
|
929 .SH ENVIRONMENT VARIABLES |
|
930 .SS CLASSPATH |
|
931 .PP |
|
932 If the \f[CB]\-\-class\-path\f[R] option or any of its alternate forms are |
|
933 not specified, the class path will default to the value of the |
|
934 \f[CB]CLASSPATH\f[R] environment variable if it is set. |
|
935 However, it is recommended that this environment variable should |
|
936 \f[I]not\f[R] be set, and that the \f[CB]\-\-class\-path\f[R] option should |
|
937 be used to provide an explicit value for the class path when one is |
|
938 required. |
|
939 .SS JDK_JAVAC_OPTIONS |
113 .PP |
940 .PP |
114 The content of the \f[CB]JDK_JAVAC_OPTIONS\f[R] environment variable, |
941 The content of the \f[CB]JDK_JAVAC_OPTIONS\f[R] environment variable, |
115 separated by white\-spaces ( ) or white\-space characters (\f[CB]\\n\f[R], |
942 separated by white\-spaces ( ) or white\-space characters (\f[CB]\\n\f[R], |
116 \f[CB]\\t\f[R], \f[CB]\\r\f[R], or \f[CB]\\f\f[R]) is prepended to the command |
943 \f[CB]\\t\f[R], \f[CB]\\r\f[R], or \f[CB]\\f\f[R]) is prepended to the command |
117 line arguments passed to \f[CB]javac\f[R] as a list of arguments. |
944 line arguments passed to \f[CB]javac\f[R] as a list of arguments. |
143 .RE |
970 .RE |
144 .RS |
971 .RS |
145 .PP |
972 .PP |
146 \f[CB]export\ JDK_JAVAC_OPTIONS=\[aq]\@C:\\"white\ spaces"\\argfile\[aq]\f[R] |
973 \f[CB]export\ JDK_JAVAC_OPTIONS=\[aq]\@C:\\"white\ spaces"\\argfile\[aq]\f[R] |
147 .RE |
974 .RE |
148 .SH OVERVIEW OF JAVAC OPTIONS |
975 .SH COMMAND\-LINE ARGUMENT FILES |
149 .PP |
976 .PP |
150 The compiler has sets of standard options, and cross\-compilation |
977 An argument file can include command\-line options and source file names |
151 options that are supported on the current development environment. |
978 in any combination. |
152 The compiler also has a set of nonstandard options that are specific to |
|
153 the current virtual machine and compiler implementations but are subject |
|
154 to change in the future. |
|
155 The nonstandard options begin with \f[CB]\-X\f[R] . |
|
156 The different sets of \f[CB]javac\f[R] options are described in the |
|
157 following sections: |
|
158 .IP \[bu] 2 |
|
159 \f[B]Standard Options\f[R] |
|
160 .IP \[bu] 2 |
|
161 \f[B]Cross\-Compilation Options for javac\f[R] |
|
162 .IP \[bu] 2 |
|
163 \f[B]Extra Options\f[R] |
|
164 .SH STANDARD OPTIONS |
|
165 .TP |
|
166 .B \f[CB]\@\f[R]\f[I]filename\f[R] |
|
167 Reads options and file names from a file. |
|
168 To shorten or simplify the \f[CB]javac\f[R] command, you can specify one |
|
169 or more files that contain arguments to the \f[CB]javac\f[R] command |
|
170 (except \f[CB]\-J\f[R] options). |
|
171 This lets you to create \f[CB]javac\f[R] commands of any length on any |
|
172 operating system. |
|
173 See \f[B]javac Command\-Line Argument Files\f[R]. |
|
174 .RS |
|
175 .RE |
|
176 .TP |
|
177 .B \f[CB]\-A\f[R]\f[I]key\f[R][\f[CB]=\f[R]\f[I]value\f[R]] |
|
178 Specifies options to pass to annotation processors. |
|
179 These options aren\[aq]t interpreted by \f[CB]javac\f[R] directly, but are |
|
180 made available for use by individual processors. |
|
181 The \f[I]key\f[R] value should be one or more identifiers separated by a |
|
182 dot (\f[CB]\&.\f[R]). |
|
183 .RS |
|
184 .RE |
|
185 .TP |
|
186 .B \f[CB]\-\-add\-modules\f[R] \f[I]module\f[R]\f[CB],\f[R]\f[I]module\f[R] |
|
187 Specifies root modules to resolve in addition to the initial modules, or |
|
188 all modules on the module path if \f[I]module\f[R] is |
|
189 \f[CB]ALL\-MODULE\-PATH.\f[R] |
|
190 .RS |
|
191 .RE |
|
192 .TP |
|
193 .B \f[CB]\-\-boot\-class\-path\f[R] \f[I]path\f[R] or \f[CB]\-bootclasspath\f[R] \f[I]path\f[R] |
|
194 Overrides the location of the bootstrap class files. |
|
195 .RS |
|
196 .PP |
|
197 \f[B]Note:\f[R] |
|
198 .PP |
|
199 This can only be used when compiling for versions prior to JDK 9. |
|
200 As applicable, see the descriptions in\ \f[CB]\-\-release\f[R], |
|
201 \f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details. |
|
202 .RE |
|
203 .TP |
|
204 .B \f[CB]\-\-class\-path\f[R] \f[I]path\f[R], \f[CB]\-classpath\f[R] \f[I]path\f[R], or \f[CB]\-cp\f[R] \f[I]path\f[R] |
|
205 Specifies where to find user class files and annotation processors. |
|
206 This class path overrides the user class path in the \f[CB]CLASSPATH\f[R] |
|
207 environment variable. |
|
208 .RS |
|
209 .IP \[bu] 2 |
|
210 If \f[CB]\-\-class\-path\f[R], \f[CB]\-classpath\f[R], or \f[CB]\-cp\f[R] |
|
211 aren\[aq]t specified, then the user class path is the current directory. |
|
212 .IP \[bu] 2 |
|
213 If the \f[CB]\-sourcepath\f[R] option isn\[aq]t specified, then the user |
|
214 class path is also searched for source files. |
|
215 .IP \[bu] 2 |
|
216 If the \f[CB]\-processorpath\f[R] option isn\[aq]t specified, then the |
|
217 class path is also searched for annotation processors. |
|
218 .RE |
|
219 .TP |
|
220 .B \f[CB]\-d\f[R] \f[I]directory\f[R] |
|
221 Sets the destination directory for class files. |
|
222 If a class is part of a package, then \f[CB]javac\f[R] puts the class file |
|
223 in a subdirectory that reflects the package name and creates directories |
|
224 as needed. |
|
225 For example: |
|
226 .RS |
|
227 .IP \[bu] 2 |
|
228 \f[B]Oracle Solaris, Linux, and OS X:\f[R] If you specify |
|
229 \f[CB]\-d\ /home/myclasses\f[R] and the class is called |
|
230 \f[CB]com.mypackage.MyClass\f[R], then the class file is |
|
231 \f[CB]/home/myclasses/com/mypackage/MyClass.class\f[R]. |
|
232 .IP \[bu] 2 |
|
233 \f[B]Windows:\f[R] If you specify \f[CB]\-d\ C:\\myclasses\f[R] and the |
|
234 class is called \f[CB]com.mypackage.MyClass\f[R], then the class file is |
|
235 \f[CB]C:\\myclasses\\com\\mypackage\\MyClass.class\f[R]. |
|
236 .PP |
|
237 If the \f[CB]\-d\f[R] option isn\[aq]t specified, then \f[CB]javac\f[R] puts |
|
238 each class file in the same directory as the source file from which it |
|
239 was generated. |
|
240 .PP |
|
241 \f[B]Note:\f[R] |
|
242 .PP |
|
243 The directory specified by the \f[CB]\-d\f[R] option isn\[aq]t |
|
244 automatically added to your user class path. |
|
245 .RE |
|
246 .TP |
|
247 .B \f[CB]\-deprecation\f[R] |
|
248 Shows a description of each use or override of a deprecated member or |
|
249 class. |
|
250 Without the \f[CB]\-deprecation\f[R] option, \f[CB]javac\f[R] shows a |
|
251 summary of the source files that use or override deprecated members or |
|
252 classes. |
|
253 The \f[CB]\-deprecation\f[R] option is shorthand for |
|
254 \f[CB]\-Xlint:deprecation\f[R]. |
|
255 .RS |
|
256 .RE |
|
257 .TP |
|
258 .B \f[CB]\-\-enable\-preview\f[R] |
|
259 Enables preview language features. |
|
260 Used in conjunction with either \f[CB]\-source\f[R] or |
|
261 \f[CB]\-\-release\f[R]. |
|
262 .RS |
|
263 .RE |
|
264 .TP |
|
265 .B \f[CB]\-encoding\f[R] \f[I]encoding\f[R] |
|
266 Specifies character encoding used by source files, such as EUC\-JP and |
|
267 UTF\-8. |
|
268 If the \f[CB]\-encoding\f[R] option isn\[aq]t specified, then the platform |
|
269 default converter is used. |
|
270 .RS |
|
271 .RE |
|
272 .TP |
|
273 .B \f[CB]\-endorseddirs\f[R] \f[I]directories\f[R] |
|
274 Overrides the location of the endorsed standards path. |
|
275 .RS |
|
276 .PP |
|
277 \f[B]Note:\f[R] |
|
278 .PP |
|
279 This can only be used when compiling for versions prior to JDK 9. |
|
280 As applicable, see the descriptions in\ \f[CB]\-\-release\f[R], |
|
281 \f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details. |
|
282 .RE |
|
283 .TP |
|
284 .B \f[CB]\-extdirs\f[R] \f[I]directories\f[R] |
|
285 Overrides the location of the installed extensions. |
|
286 The \f[CB]directories\f[R] variable is a colon\-separated list of |
|
287 directories. |
|
288 Each JAR file in the specified directories is searched for class files. |
|
289 All JAR files found become part of the class path. |
|
290 .RS |
|
291 .PP |
|
292 If you are cross\-compiling, then this option specifies the directories |
|
293 that contain the extension classes. |
|
294 See \f[B]Cross\-Compilation Options for javac\f[R]. |
|
295 .PP |
|
296 \f[B]Note:\f[R] |
|
297 .PP |
|
298 This can only be used when compiling for versions prior to JDK 9. |
|
299 As applicable, see the descriptions in\ \f[CB]\-\-release\f[R], |
|
300 \f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details. |
|
301 .RE |
|
302 .TP |
|
303 .B \f[CB]\-g\f[R] |
|
304 Generates all debugging information, including local variables. |
|
305 By default, only line number and source file information is generated. |
|
306 .RS |
|
307 .RE |
|
308 .TP |
|
309 .B \f[CB]\-g:\f[R][\f[CB]lines\f[R], \f[CB]vars\f[R], \f[CB]source\f[R]] |
|
310 Generates only the kinds of debugging information specified by the |
|
311 comma\-separated list of keywords. |
|
312 Valid keywords are: |
|
313 .RS |
|
314 .TP |
|
315 .B \f[CB]lines\f[R] |
|
316 Line number debugging information. |
|
317 .RS |
|
318 .RE |
|
319 .TP |
|
320 .B \f[CB]vars\f[R] |
|
321 Local variable debugging information. |
|
322 .RS |
|
323 .RE |
|
324 .TP |
|
325 .B \f[CB]source\f[R] |
|
326 Source file debugging information. |
|
327 .RS |
|
328 .RE |
|
329 .RE |
|
330 .TP |
|
331 .B \f[CB]\-g:none\f[R] |
|
332 Doesn\[aq]t generate debugging information. |
|
333 .RS |
|
334 .RE |
|
335 .TP |
|
336 .B \f[CB]\-h\f[R] \f[I]directory\f[R] |
|
337 Specfies where to place generated native header files. |
|
338 .RS |
|
339 .PP |
|
340 When you specify this option, a native header file is generated for each |
|
341 class that contains native methods or that has one or more constants |
|
342 annotated with the \f[B]\f[BC]java.lang.annotation.Native\f[B]\f[R] |
|
343 [https://docs.oracle.com/javase/10/docs/api/java/lang/annotation/Native.html] |
|
344 annotation. |
|
345 If the class is part of a package, then the compiler puts the native |
|
346 header file in a subdirectory that reflects the package name and creates |
|
347 directories as needed. |
|
348 .RE |
|
349 .TP |
|
350 .B \f[CB]\-\-help\f[R], \f[CB]\-help\f[R] or \f[CB]\-?\f[R] |
|
351 Prints a synopsis of the standard options. |
|
352 .RS |
|
353 .RE |
|
354 .TP |
|
355 .B \f[CB]\-\-help\-extra\f[R] or \f[CB]\-X\f[R] |
|
356 Prints the help for extra options. |
|
357 .RS |
|
358 .RE |
|
359 .TP |
|
360 .B \f[CB]\-implicit:\f[R][\f[CB]none\f[R], \f[CB]class\f[R]] |
|
361 Specifies whether or not to generate class files for implicitly |
|
362 referenced files: |
|
363 .RS |
|
364 .IP \[bu] 2 |
|
365 \f[CB]\-implicit:class\f[R] \-\-\- Automatically generates class files. |
|
366 .IP \[bu] 2 |
|
367 \f[CB]\-implicit:none\f[R] \-\-\- Suppresses class file generation. |
|
368 .PP |
|
369 If this option isn\[aq]t specified, then the default automatically |
|
370 generates class files. |
|
371 In this case, the compiler issues a warning if any class files are |
|
372 generated when also doing annotation processing. |
|
373 The warning isn\[aq]t issued when the \f[CB]\-implicit\f[R] option is |
|
374 explicitly set. |
|
375 See \f[B]Searching for Types\f[R]. |
|
376 .RE |
|
377 .TP |
|
378 .B \f[CB]\-J\f[R]\f[I]option\f[R] |
|
379 Passes \f[I]option\f[R] to the runtime system, where \f[I]option\f[R] is |
|
380 one of the Java options described on \f[B]java\f[R] command. |
|
381 For example, \f[CB]\-J\-Xms48m\f[R] sets the startup memory to 48 MB. |
|
382 .RS |
|
383 .PP |
|
384 \f[B]Note:\f[R] |
|
385 .PP |
|
386 The \f[CB]CLASSPATH\f[R] environment variable, \f[CB]\-classpath\f[R] |
|
387 option, \f[CB]\-bootclasspath\f[R] option, and \f[CB]\-extdirs\f[R] option |
|
388 don\[aq]t specify the classes used to run \f[CB]javac\f[R]. |
|
389 Trying to customize the compiler implementation with these options and |
|
390 variables is risky and often doesn\[aq]t accomplish what you want. |
|
391 If you must customize the complier implementation, then use the |
|
392 \f[CB]\-J\f[R] option to pass options through to the underlying Java |
|
393 launcher. |
|
394 .RE |
|
395 .TP |
|
396 .B \f[CB]\-\-limit\-modules\f[R] \f[I]module\f[R]\f[CB],\f[R]\f[I]module\f[R]* |
|
397 Limits the universe of observable modules. |
|
398 .RS |
|
399 .RE |
|
400 .TP |
|
401 .B \f[CB]\-\-module\f[R] \f[I]module\-name\f[R] or \f[CB]\-m\f[R] \f[I]module\-name\f[R] |
|
402 Compiles only the specified module and checks time stamps. |
|
403 .RS |
|
404 .RE |
|
405 .TP |
|
406 .B \f[CB]\-\-module\-path\f[R] \f[I]path\f[R] or \f[CB]\-p\f[R] \f[I]path\f[R] |
|
407 Specifies where to find application modules. |
|
408 .RS |
|
409 .RE |
|
410 .TP |
|
411 .B \f[CB]\-\-module\-source\-path\f[R] \f[I]module\-source\-path\f[R] |
|
412 Specifies where to find input source files for multiple modules. |
|
413 .RS |
|
414 .RE |
|
415 .TP |
|
416 .B \f[CB]\-\-module\-version\f[R] \f[I]version\f[R] |
|
417 Specifies the version of modules that are being compiled. |
|
418 .RS |
|
419 .RE |
|
420 .TP |
|
421 .B \f[CB]\-nowarn\f[R] |
|
422 Disables warning messages. |
|
423 This option operates the same as the \f[CB]\-Xlint:none\f[R] option. |
|
424 .RS |
|
425 .RE |
|
426 .TP |
|
427 .B \f[CB]\-parameters\f[R] |
|
428 Generates metadata for reflection on method parameters. |
|
429 Stores formal parameter names of constructors and methods in the |
|
430 generated class file so that the method |
|
431 \f[CB]java.lang.reflect.Executable.getParameters\f[R] from the Reflection |
|
432 API can retrieve them. |
|
433 .RS |
|
434 .RE |
|
435 .TP |
|
436 .B \f[CB]\-proc:\f[R][\f[CB]none\f[R], \f[CB]only\f[R]] |
|
437 Controls whether annotation processing and compilation are done. |
|
438 \f[CB]\-proc:none\f[R] means that compilation takes place without |
|
439 annotation processing. |
|
440 \f[CB]\-proc:only\f[R] means that only annotation processing is done, |
|
441 without any subsequent compilation. |
|
442 .RS |
|
443 .RE |
|
444 .TP |
|
445 .B \f[CB]\-processor\f[R] \f[I]class1\f[R][\f[CB],\f[R]\f[I]class2\f[R]\f[CB],\f[R]\f[I]class3\f[R]...] |
|
446 Names of the annotation processors to run. |
|
447 This bypasses the default discovery process. |
|
448 .RS |
|
449 .RE |
|
450 .TP |
|
451 .B \f[CB]\-\-processor\-module\-path\f[R] \f[I]path\f[R] |
|
452 Specifies the module path used for finding annotation processors. |
|
453 .RS |
|
454 .RE |
|
455 .TP |
|
456 .B \f[CB]\-\-processor\-path\f[R] \f[I]path\f[R] or \f[CB]\-processorpath\f[R] \f[I]path\f[R] |
|
457 Specifies where to find annotation processors. |
|
458 If this option isn\[aq]t used, then the class path is searched for |
|
459 processors. |
|
460 .RS |
|
461 .RE |
|
462 .TP |
|
463 .B \f[CB]\-profile\f[R] \f[I]profile\f[R] |
|
464 Checks that the API used is available in the specified profile. |
|
465 .RS |
|
466 .PP |
|
467 \f[B]Note:\f[R] |
|
468 .PP |
|
469 This can only be used when compiling for versions prior to JDK 9. |
|
470 As applicable, see the descriptions in\ \f[CB]\-\-release\f[R], |
|
471 \f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details. |
|
472 .RE |
|
473 .TP |
|
474 .B \f[CB]\-\-release\f[R] \f[I]release\f[R] |
|
475 Compiles source code according to the rules of the Java programming |
|
476 language for the specified Java SE release, generating class files |
|
477 suitable for that release. |
|
478 Additionally, compiles source code against the API of the specified Java |
|
479 SE release and the API supported by the corresponding JDK release. |
|
480 The supported values of \f[I]release\f[R] are the current Java SE release |
|
481 and a limited number of previous releases. |
|
482 The exact set of supported values is given in the command\-line help. |
|
483 .RS |
|
484 .PP |
|
485 The API of a Java SE release consists of the \f[CB]java.*\f[R], |
|
486 \f[CB]javax.*\f[R], and \f[CB]org.*\f[R] packages that are exported by Java |
|
487 SE modules in the release. |
|
488 .PP |
|
489 The API supported by a JDK release consists of the \f[CB]com.*\f[R] and |
|
490 \f[CB]jdk.*\f[R] packages that are exported by JDK modules in the release, |
|
491 plus the \f[CB]javax.*\f[R] packages that are exported by standard, but |
|
492 non\-Java SE, modules in the release. |
|
493 .PP |
|
494 \f[B]Note:\f[R] |
|
495 .PP |
|
496 The \f[CB]\-\-add\-exports\f[R] option cannot be used to enlarge the set |
|
497 of packages exported by the Java SE and JDK API. |
|
498 .RE |
|
499 .TP |
|
500 .B \f[CB]\-s\f[R] \f[I]directory\f[R] |
|
501 Specifies the directory used to place the generated source files. |
|
502 If a class is part of a package, then the compiler puts the source file |
|
503 in a subdirectory that reflects the package name and creates directories |
|
504 as needed. |
|
505 For example: |
|
506 .RS |
|
507 .IP \[bu] 2 |
|
508 \f[B]Oracle Solaris, Linux, and OS X:\f[R] If you specify |
|
509 \f[CB]\-s\ /home/mysrc\f[R] and the class is called |
|
510 \f[CB]com.mypackage.MyClass\f[R], then the source file is put in |
|
511 \f[CB]/home/mysrc/com/mypackage/MyClass.java\f[R]. |
|
512 .IP \[bu] 2 |
|
513 \f[B]Windows:\f[R] If you specify \f[CB]\-s\ C:\\mysrc\f[R] and the class |
|
514 is called \f[CB]com.mypackage.MyClass\f[R], then the source file is put in |
|
515 \f[CB]C:\\mysrc\\com\\mypackage\\MyClass.java\f[R]. |
|
516 .RE |
|
517 .TP |
|
518 .B \f[CB]\-\-source\f[R] \f[I]release\f[R] or \f[CB]\-source\f[R] \f[I]release\f[R] |
|
519 Compiles source code according to the rules of the Java programming |
|
520 language for the specified Java SE release. |
|
521 The supported values of \f[I]release\f[R] are the current Java SE release |
|
522 and a limited number of previous releases. |
|
523 The exact set of supported values is given in the command\-line help. |
|
524 .RS |
|
525 .PP |
|
526 If the option is not specified, the default is to compile source code |
|
527 according to the rules of the Java programming language for the current |
|
528 Java SE release. |
|
529 .RE |
|
530 .TP |
|
531 .B \f[CB]\-\-source\-path\f[R] \f[I]path\f[R] or \f[CB]\-sourcepath\f[R] \f[I]path\f[R] |
|
532 Specifies where to find input source files. |
|
533 This is the source code path used to search for class or interface |
|
534 definitions. |
|
535 As with the user class path, source path entries are separated by colons |
|
536 (\f[CB]:\f[R]) on Oracle Solaris and semicolons (\f[CB];\f[R]) on Windows. |
|
537 They can be directories, JAR archives, or ZIP archives. |
|
538 If packages are used, then the local path name within the directory or |
|
539 archive must reflect the package name. |
|
540 .RS |
|
541 .PP |
|
542 \f[B]Note:\f[R] |
|
543 .PP |
|
544 Classes found through the class path might be recompiled when their |
|
545 source files are also found. |
|
546 See \f[B]Searching for Types\f[R]. |
|
547 .RE |
|
548 .TP |
|
549 .B \f[CB]\-\-system\f[R] \f[I]jdk\f[R] | \f[CB]none\f[R] |
|
550 Overrides the location of system modules. |
|
551 .RS |
|
552 .RE |
|
553 .TP |
|
554 .B \f[CB]\-\-target\f[R] \f[I]release\f[R] or \f[CB]\-target\f[R] \f[I]release\f[R] |
|
555 Generates \f[CB]class\f[R] files suitable for the specified Java SE |
|
556 release. |
|
557 The supported values of \f[I]release\f[R] are the current Java SE release |
|
558 and a limited number of previous releases. |
|
559 The exact set of supported values is given in the command\-line help. |
|
560 .RS |
|
561 .PP |
|
562 \f[B]Note:\f[R] |
|
563 .PP |
|
564 It is an error to specify a value for \f[I]release\f[R] that is lower |
|
565 than the the release for which the source code is being compiled. |
|
566 (See \f[CB]\-\-source\f[R]). |
|
567 .RE |
|
568 .TP |
|
569 .B \f[CB]\-\-upgrade\-module\-path\f[R] \f[I]path\f[R] |
|
570 Overrides the location of upgradeable modules. |
|
571 .RS |
|
572 .RE |
|
573 .TP |
|
574 .B \f[CB]\-verbose\f[R] |
|
575 Outputs messages about what the compiler is doing. |
|
576 Messages include information about each class loaded and each source |
|
577 file compiled. |
|
578 .RS |
|
579 .RE |
|
580 .TP |
|
581 .B \f[CB]\-\-version\f[R] or \f[CB]\-version\f[R] |
|
582 Prints version information. |
|
583 .RS |
|
584 .RE |
|
585 .TP |
|
586 .B \f[CB]\-Werror\f[R] |
|
587 Terminates compilation when warnings occur. |
|
588 .RS |
|
589 .RE |
|
590 .SH CROSS\-COMPILATION OPTIONS FOR JAVAC |
|
591 .PP |
|
592 By default, for releases prior to JDK 9, classes were compiled against |
|
593 the bootstrap classes of the platform that shipped with |
|
594 the\f[CB]javac\f[R] command. |
|
595 But \f[CB]javac\f[R] also supports cross\-compiling, in which classes are |
|
596 compiled against bootstrap classes of a different Java platform |
|
597 implementation. |
|
598 It\[aq]s important to use the \f[CB]\-bootclasspath\f[R] and |
|
599 \f[CB]\-extdirs\f[R] options when cross\-compiling. |
|
600 .PP |
|
601 \f[B]Note:\f[R] |
|
602 .PP |
|
603 This can only be used when compiling for versions prior to JDK 9. |
|
604 As applicable, see the descriptions in\ \f[CB]\-\-release\f[R], |
|
605 \f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details. |
|
606 .SH EXTRA OPTIONS |
|
607 .TP |
|
608 .B \f[CB]\-\-add\-exports\f[R] \f[I]module\f[R]\f[CB]/\f[R]\f[I]package\f[R]\f[CB]=\f[R]\f[I]other\-module\f[R](\f[CB],\f[R]\f[I]other\-module\f[R])* |
|
609 Specifies a package to be considered as exported from its defining |
|
610 module to additional modules or to all unnamed modules when the value of |
|
611 \f[I]other\-module\f[R] is \f[CB]ALL\-UNNAMED\f[R]. |
|
612 .RS |
|
613 .RE |
|
614 .TP |
|
615 .B \f[CB]\-\-add\-reads\f[R] \f[I]module\f[R]\f[CB]=\f[R]\f[I]other\-module\f[R](\f[CB],\f[R]\f[I]other\-module\f[R])* |
|
616 Specifies additional modules to be considered as required by a given |
|
617 module. |
|
618 .RS |
|
619 .RE |
|
620 .TP |
|
621 .B \f[CB]\-\-default\-module\-for\-created\-files\f[R] \f[I]module\-name\f[R] |
|
622 Specifies the fallback target module for files created by annotation |
|
623 processors, if none is specified or inferred. |
|
624 .RS |
|
625 .RE |
|
626 .TP |
|
627 .B \f[CB]\-Djava.endorsed.dirs=\f[R]\f[I]dirs\f[R] |
|
628 Overrides the location of the endorsed standards path. |
|
629 .RS |
|
630 .PP |
|
631 \f[B]Note:\f[R] |
|
632 .PP |
|
633 This can only be used when compiling for versions prior to JDK 9. |
|
634 As applicable, see the descriptions in\ \f[CB]\-\-release\f[R], |
|
635 \f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details. |
|
636 .RE |
|
637 .TP |
|
638 .B \f[CB]\-Djava.ext.dirs=\f[R]\f[I]dirs\f[R] |
|
639 Overrides the location of installed extensions. |
|
640 .RS |
|
641 .PP |
|
642 \f[B]Note:\f[R] |
|
643 .PP |
|
644 This can only be used when compiling for versions prior to JDK 9. |
|
645 As applicable, see the descriptions in\ \f[CB]\-\-release\f[R], |
|
646 \f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details. |
|
647 .RE |
|
648 .TP |
|
649 .B \f[CB]\-\-doclint\-format\f[R] [\f[CB]html4\f[R]|\f[CB]html5\f[R]] |
|
650 Specifies the format for documentation comments. |
|
651 .RS |
|
652 .RE |
|
653 .TP |
|
654 .B \f[CB]\-\-patch\-module\f[R] \f[I]module\f[R]\f[CB]=\f[R]\f[I]file\f[R](\f[CB]:\f[R]\f[I]file\f[R])* |
|
655 Overrides or augments a module with classes and resources in JAR files |
|
656 or directories. |
|
657 .RS |
|
658 .RE |
|
659 .TP |
|
660 .B \f[CB]\-Xbootclasspath:\f[R]\f[I]path\f[R] |
|
661 Overrides the location of the bootstrap class files. |
|
662 .RS |
|
663 .PP |
|
664 \f[B]Note:\f[R] |
|
665 .PP |
|
666 This can only be used when compiling for versions prior to JDK 9. |
|
667 As applicable, see the descriptions in\ \f[CB]\-\-release\f[R], |
|
668 \f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details. |
|
669 .RE |
|
670 .TP |
|
671 .B \f[CB]\-Xbootclasspath/a:\f[R]\f[I]path\f[R] |
|
672 Adds a suffix to the bootstrap class path. |
|
673 .RS |
|
674 .PP |
|
675 \f[B]Note:\f[R] |
|
676 .PP |
|
677 This can only be used when compiling for versions prior to JDK 9. |
|
678 As applicable, see the descriptions in\ \f[CB]\-\-release\f[R], |
|
679 \f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details. |
|
680 .RE |
|
681 .TP |
|
682 .B \f[CB]\-Xbootclasspath/p:\f[R]\f[I]path\f[R] |
|
683 Adds a prefix to the bootstrap class path. |
|
684 .RS |
|
685 .PP |
|
686 \f[B]Note:\f[R] |
|
687 .PP |
|
688 This can only be used when compiling for versions prior to JDK 9. |
|
689 As applicable, see the descriptions in\ \f[CB]\-\-release\f[R], |
|
690 \f[CB]\-source\f[R], or \f[CB]\-target\f[R]\ for details. |
|
691 .RE |
|
692 .TP |
|
693 .B \f[CB]\-Xdiags:\f[R][\f[CB]compact\f[R], \f[CB]verbose\f[R]] |
|
694 Selects a diagnostic mode. |
|
695 .RS |
|
696 .RE |
|
697 .TP |
|
698 .B \f[CB]\-Xdoclint\f[R] |
|
699 Enables recommended checks for problems in \f[CB]javadoc\f[R] comments |
|
700 .RS |
|
701 .RE |
|
702 .TP |
|
703 .B \f[CB]\-Xdoclint:\f[R](\f[CB]all\f[R]|\f[CB]none\f[R]|[\f[CB]\-\f[R]]\f[I]group\f[R])[\f[CB]/\f[R]\f[I]access\f[R]] |
|
704 Enables or disables specific groups of checks, |
|
705 .RS |
|
706 .PP |
|
707 \f[I]group\f[R] can have one of the following values: |
|
708 .IP \[bu] 2 |
|
709 \f[CB]accessibility\f[R] |
|
710 .IP \[bu] 2 |
|
711 \f[CB]html\f[R] |
|
712 .IP \[bu] 2 |
|
713 \f[CB]missing\f[R] |
|
714 .IP \[bu] 2 |
|
715 \f[CB]reference\f[R] |
|
716 .IP \[bu] 2 |
|
717 \f[CB]syntax\f[R] |
|
718 .PP |
|
719 The variable \f[I]access\f[R] specifies the minimum visibility level of |
|
720 classes and members that the \f[CB]\-Xdoclint\f[R] option checks. |
|
721 It can have one of the following values (in order of most to least |
|
722 visible): |
|
723 .IP \[bu] 2 |
|
724 \f[CB]public\f[R] |
|
725 .IP \[bu] 2 |
|
726 \f[CB]protected\f[R] |
|
727 .IP \[bu] 2 |
|
728 \f[CB]package\f[R] |
|
729 .IP \[bu] 2 |
|
730 \f[CB]private\f[R] |
|
731 .PP |
|
732 The default \f[I]access\f[R] level is \f[CB]private\f[R]. |
|
733 .PP |
|
734 For more information about these groups of checks, see the |
|
735 \f[CB]\-Xdoclint\f[R] option of the \f[CB]javadoc\f[R] command. |
|
736 The \f[CB]\-Xdoclint\f[R] option is disabled by default in the |
|
737 \f[CB]javac\f[R] command. |
|
738 .PP |
|
739 For example, the following option checks classes and members (with all |
|
740 groups of checks) that have the access level of protected and higher |
|
741 (which includes protected and public): |
|
742 .RS |
|
743 .PP |
|
744 \f[CB]\-Xdoclint:all/protected\f[R] |
|
745 .RE |
|
746 .PP |
|
747 The following option enables all groups of checks for all access levels, |
|
748 except it won\[aq]t check for HTML errors for classes and members that |
|
749 have the access level of package and higher (which includes package, |
|
750 protected and public): |
|
751 .RS |
|
752 .PP |
|
753 \f[CB]\-Xdoclint:all,\-html/package\f[R] |
|
754 .RE |
|
755 .RE |
|
756 .TP |
|
757 .B \f[CB]\-Xdoclint/package:\f[R][\f[CB]\-\f[R]]\f[I]packages\f[R](\f[CB],\f[R][\f[CB]\-\f[R]]\f[I]package\f[R])* |
|
758 Enables or disables checks in specific packages. |
|
759 Each \f[I]package\f[R] is either the qualified name of a package or a |
|
760 package name prefix followed by \f[CB]\&.*\f[R], which expands to all |
|
761 sub\-packages of the given package. |
|
762 Each \f[I]package\f[R] can be prefixed with a hyphen (\f[CB]\-\f[R]) to |
|
763 disable checks for a specified package or packages. |
|
764 .RS |
|
765 .RE |
|
766 .TP |
|
767 .B \f[CB]\-Xlint\f[R] |
|
768 Enables all recommended warnings. |
|
769 In this release, enabling all available warnings is recommended. |
|
770 .RS |
|
771 .RE |
|
772 .TP |
|
773 .B \f[CB]\-Xlint:\f[R][\f[CB]\-\f[R]]\f[I]key\f[R](\f[CB],\f[R][\f[CB]\-\f[R]]\f[I]key\f[R])* |
|
774 Supplies warnings to enable or disable, separated by comma. |
|
775 Precede a key by a hyphen (\f[CB]\-\f[R]) to disable the specified |
|
776 warning. |
|
777 .RS |
|
778 .PP |
|
779 Supported values for \f[I]key\f[R] are: |
|
780 .IP \[bu] 2 |
|
781 \f[CB]all\f[R]: Enables all warnings. |
|
782 .IP \[bu] 2 |
|
783 \f[CB]auxiliaryclass\f[R]: Warns about an auxiliary class that\[aq]s |
|
784 hidden in a source file, and is used from other files. |
|
785 .IP \[bu] 2 |
|
786 \f[CB]cast\f[R]: Warns about the use of unnecessary casts. |
|
787 .IP \[bu] 2 |
|
788 \f[CB]classfile\f[R]: Warns about the issues related to classfile |
|
789 contents. |
|
790 .IP \[bu] 2 |
|
791 \f[CB]deprecation\f[R]: Warns about the use of deprecated items. |
|
792 .IP \[bu] 2 |
|
793 \f[CB]dep\-ann\f[R]: Warns about the items marked as deprecated in |
|
794 \f[CB]javadoc\f[R] but without the \f[CB]\@Deprecated\f[R] annotation. |
|
795 .IP \[bu] 2 |
|
796 \f[CB]divzero\f[R]: Warns about the division by the constant integer 0. |
|
797 .IP \[bu] 2 |
|
798 \f[CB]empty\f[R]: Warns about an empty statement after \f[CB]if\f[R]. |
|
799 .IP \[bu] 2 |
|
800 \f[CB]exports\f[R]: Warns about the issues regarding module exports. |
|
801 .IP \[bu] 2 |
|
802 \f[CB]fallthrough\f[R]: Warns about the falling through from one case of a |
|
803 switch statement to the next. |
|
804 .IP \[bu] 2 |
|
805 \f[CB]finally\f[R]: Warns about \f[CB]finally\f[R] clauses that don\[aq]t |
|
806 terminate normally. |
|
807 .IP \[bu] 2 |
|
808 \f[CB]module\f[R]: Warns about the module system\-related issues. |
|
809 .IP \[bu] 2 |
|
810 \f[CB]opens\f[R]: Warns about the issues related to module opens. |
|
811 .IP \[bu] 2 |
|
812 \f[CB]options\f[R]: Warns about the issues relating to use of command line |
|
813 options. |
|
814 .IP \[bu] 2 |
|
815 \f[CB]overloads\f[R]: Warns about the issues related to method overloads. |
|
816 .IP \[bu] 2 |
|
817 \f[CB]overrides\f[R]: Warns about the issues related to method overrides. |
|
818 .IP \[bu] 2 |
|
819 \f[CB]path\f[R]: Warns about the invalid path elements on the command l |
|
820 ine. |
|
821 .IP \[bu] 2 |
|
822 \f[CB]processing\f[R]: Warns about the issues related to annotation |
|
823 processing. |
|
824 .IP \[bu] 2 |
|
825 \f[CB]rawtypes\f[R]: Warns about the use of raw types. |
|
826 .IP \[bu] 2 |
|
827 \f[CB]removal\f[R]: Warns about the use of an API that has been marked for |
|
828 removal. |
|
829 .IP \[bu] 2 |
|
830 \f[CB]requires\-automatic\f[R]: Warns developers about the use of |
|
831 automatic modules in requires clauses. |
|
832 .IP \[bu] 2 |
|
833 \f[CB]requires\-transitive\-automatic\f[R]: Warns about automatic modules |
|
834 in requires transitive. |
|
835 .IP \[bu] 2 |
|
836 \f[CB]serial\f[R]: Warns about the serializable classes that don\[aq]t |
|
837 provide a serial version ID. |
|
838 Also warns about access to non\-public members from a serializable |
|
839 element. |
|
840 .IP \[bu] 2 |
|
841 \f[CB]static\f[R]: Warns about the accessing a static member using an |
|
842 instance. |
|
843 .IP \[bu] 2 |
|
844 \f[CB]try\f[R]: Warns about the issues relating to the use of try blocks ( |
|
845 that is, try\-with\-resources). |
|
846 .IP \[bu] 2 |
|
847 \f[CB]unchecked\f[R]: Warns about the unchecked operations. |
|
848 .IP \[bu] 2 |
|
849 \f[CB]varargs\f[R]: Warns about the potentially unsafe \f[CB]vararg\f[R] |
|
850 methods. |
|
851 .IP \[bu] 2 |
|
852 \f[CB]none\f[R]: Disables all warnings. |
|
853 .PP |
|
854 See \f[B]Examples of Using \-Xlint keys\f[R]. |
|
855 .RE |
|
856 .TP |
|
857 .B \f[CB]\-Xmaxerrs\f[R] \f[I]number\f[R] |
|
858 Sets the maximum number of errors to print. |
|
859 .RS |
|
860 .RE |
|
861 .TP |
|
862 .B \f[CB]\-Xmaxwarns\f[R] \f[I]number\f[R] |
|
863 Sets the maximum number of warnings to print. |
|
864 .RS |
|
865 .RE |
|
866 .TP |
|
867 .B \f[CB]\-Xpkginfo:\f[R][\f[CB]always\f[R], \f[CB]legacy\f[R], \f[CB]nonempty\f[R]] |
|
868 Specifies when and how the \f[CB]javac\f[R] command generates |
|
869 \f[CB]package\-info.class\f[R] files from \f[CB]package\-info.java\f[R] |
|
870 files using one of the following options: |
|
871 .RS |
|
872 .TP |
|
873 .B \f[CB]always\f[R] |
|
874 Generates a \f[CB]package\-info.class\f[R] file for every |
|
875 \f[CB]package\-info.java\f[R] file. |
|
876 This option may be useful if you use a build system such as Ant, which |
|
877 checks that each \f[CB]\&.java\f[R] file has a corresponding |
|
878 \f[CB]\&.class\f[R] file. |
|
879 .RS |
|
880 .RE |
|
881 .TP |
|
882 .B \f[CB]legacy\f[R] |
|
883 Generates a \f[CB]package\-info.class\f[R] file only if |
|
884 \f[CB]package\-info.java\f[R] contains annotations. |
|
885 This option doesn\[aq]t generate a \f[CB]package\-info.class\f[R] file if |
|
886 \f[CB]package\-info.java\f[R] contains only comments. |
|
887 .RS |
|
888 .PP |
|
889 \f[B]Note:\f[R] |
|
890 .PP |
|
891 A \f[CB]package\-info.class\f[R] file might be generated but be empty if |
|
892 all the annotations in the \f[CB]package\-info.java\f[R] file have |
|
893 \f[CB]RetentionPolicy.SOURCE\f[R]. |
|
894 .RE |
|
895 .TP |
|
896 .B \f[CB]nonempty\f[R] |
|
897 Generates a \f[CB]package\-info.class\f[R] file only if |
|
898 \f[CB]package\-info.java\f[R] contains annotations with |
|
899 \f[CB]RetentionPolicy.CLASS\f[R] or \f[CB]RetentionPolicy.RUNTIME\f[R]. |
|
900 .RS |
|
901 .RE |
|
902 .RE |
|
903 .TP |
|
904 .B \f[CB]\-Xplugin:\f[R]\f[I]name\f[R] \f[I]args\f[R] |
|
905 Specifies the name and optional arguments for a plug\-in to be run. |
|
906 .RS |
|
907 .RE |
|
908 .TP |
|
909 .B \f[CB]\-Xprefer:\f[R][\f[CB]source\f[R], \f[CB]newer\f[R]] |
|
910 Specifies which file to read when both a source file and class file are |
|
911 found for an implicitly compiled class using one of the following |
|
912 options. |
|
913 See \f[B]Searching for Types\f[R]. |
|
914 .RS |
|
915 .IP \[bu] 2 |
|
916 \f[CB]\-Xprefer:newer\f[R]: Reads the newer of the source or class files |
|
917 for a type (default). |
|
918 .IP \[bu] 2 |
|
919 \f[CB]\-Xprefer:source\f[R] : Reads the source file. |
|
920 Use \f[CB]\-Xprefer:source\f[R] when you want to be sure that any |
|
921 annotation processors can access annotations declared with a retention |
|
922 policy of \f[CB]SOURCE\f[R]. |
|
923 .RE |
|
924 .TP |
|
925 .B \f[CB]\-Xprint\f[R] |
|
926 Prints a textual representation of specified types for debugging |
|
927 purposes. |
|
928 This doesn\[aq]t perform annotation processing or compilation. |
|
929 The format of the output could change. |
|
930 .RS |
|
931 .RE |
|
932 .TP |
|
933 .B \f[CB]\-XprintProcessorInfo\f[R] |
|
934 Prints information about which annotations a processor is asked to |
|
935 process. |
|
936 .RS |
|
937 .RE |
|
938 .TP |
|
939 .B \f[CB]\-XprintRounds\f[R] |
|
940 Prints information about initial and subsequent annotation processing |
|
941 rounds. |
|
942 .RS |
|
943 .RE |
|
944 .TP |
|
945 .B \f[CB]\-Xstdout\f[R] \f[I]filename\f[R] |
|
946 Sends compiler messages to the named file. |
|
947 By default, compiler messages go to \f[CB]System.err\f[R]. |
|
948 .RS |
|
949 .RE |
|
950 .SH JAVAC COMMAND\-LINE ARGUMENT FILES |
|
951 .PP |
|
952 An argument file can include \f[CB]javac\f[R] options and source file |
|
953 names in any combination. |
|
954 The arguments within a file can be separated by spaces or new line |
979 The arguments within a file can be separated by spaces or new line |
955 characters. |
980 characters. |
956 If a file name contains embedded spaces, then put the whole file name in |
981 If a file name contains embedded spaces, then put the whole file name in |
957 double quotation marks. |
982 double quotation marks. |
958 .PP |
983 .PP |
959 File names within an argument file are relative to the current |
984 File names within an argument file are relative to the current |
960 directory, not to the location of the argument file. |
985 directory, not to the location of the argument file. |
961 Wildcards (*) aren\[aq]t allowed in these lists (such as for specifying |
986 Wildcards (\f[CB]*\f[R]) are not allowed in these lists (such as for |
962 \f[CB]*.java\f[R]). |
987 specifying \f[CB]*.java\f[R]). |
963 Use of the at sign (\f[CB]\@\f[R]) to recursively interpret files |
988 Use of the at sign (\f[CB]\@\f[R]) to recursively interpret files is not |
964 isn\[aq]t supported. |
989 supported. |
965 The \f[CB]\-J\f[R] options aren\[aq]t supported because they\[aq]re passed |
990 The \f[CB]\-J\f[R] options are not supported because they\[aq]re passed to |
966 to the launcher, which doesn\[aq]t support argument files. |
991 the launcher, which does not support argument files. |
967 .PP |
992 .PP |
968 When executing the \f[CB]javac\f[R] command, pass in the path and name of |
993 When executing the \f[CB]javac\f[R] command, pass in the path and name of |
969 each argument file with the at sign (\f[CB]\@\f[R]) leading character. |
994 each argument file with the at sign (\f[CB]\@\f[R]) leading character. |
970 When the \f[CB]javac\f[R] command encounters an argument beginning with |
995 When the \f[CB]javac\f[R] command encounters an argument beginning with |
971 the at sign (\f[CB]\@\f[R]), it expands the contents of that file into the |
996 the at sign (\f[CB]\@\f[R]), it expands the contents of that file into the |
972 argument list. |
997 argument list. |
973 .SH EXAMPLES OF USING JAVAC \@FILENAME |
998 .SS Examples of Using javac \@filename |
974 .TP |
999 .TP |
975 .B Single Argument File |
1000 .B Single Argument File |
976 You could use a single argument file named \f[CB]argfile\f[R] to hold all |
1001 You could use a single argument file named \f[CB]argfile\f[R] to hold all |
977 \f[CB]javac\f[R] arguments: |
1002 \f[CB]javac\f[R] arguments: |
978 .RS |
1003 .RS |
1038 .RS |
1063 .RS |
1039 .PP |
1064 .PP |
1040 \f[CB]javac\ \@path1/options\ \@path2/classes\f[R] |
1065 \f[CB]javac\ \@path1/options\ \@path2/classes\f[R] |
1041 .RE |
1066 .RE |
1042 .RE |
1067 .RE |
|
1068 .SH ARRANGEMENT OF SOURCE CODE |
|
1069 .PP |
|
1070 In the Java language, classes and interfaces can be organized into |
|
1071 packages, and packages can be organized into modules. |
|
1072 \f[CB]javac\f[R] expects that the physical arrangement of source files in |
|
1073 directories of the file system will mirror the organization of classes |
|
1074 into packages, and packages into modules. |
|
1075 .PP |
|
1076 It is a widely adopted convention that module names and package names |
|
1077 begin with a lower\-case letter, and that class names begin with an |
|
1078 upper\-case letter. |
|
1079 .SS Arrangement of Source Code for a Package |
|
1080 .PP |
|
1081 When classes and interfaces are organized into a package, the package is |
|
1082 represented as a directory, and any subpackages are represented as |
|
1083 subdirectories. |
|
1084 .PP |
|
1085 For example: |
|
1086 .IP \[bu] 2 |
|
1087 The package \f[CB]p\f[R] is represented as a directory called \f[CB]p\f[R]. |
|
1088 .IP \[bu] 2 |
|
1089 The package \f[CB]p.q\f[R] \-\- that is, the subpackage \f[CB]q\f[R] of |
|
1090 package \f[CB]p\f[R] \-\- is represented as the subdirectory \f[CB]q\f[R] of |
|
1091 directory \f[CB]p\f[R]. |
|
1092 The directory tree representing package \f[CB]p.q\f[R] is therefore |
|
1093 \f[CB]p\\q\f[R] on Windows, and \f[CB]p/q\f[R] on other systems. |
|
1094 .IP \[bu] 2 |
|
1095 The package \f[CB]p.q.r\f[R] is represented as the directory tree |
|
1096 \f[CB]p\\q\\r\f[R] (on Windows) or \f[CB]p/q/r\f[R] (on other systems). |
|
1097 .PP |
|
1098 Within a directory or subdirectory, \f[CB]\&.java\f[R] files represent |
|
1099 classes and interfaces in the corresponding package or subpackage. |
|
1100 .PP |
|
1101 For example: |
|
1102 .IP \[bu] 2 |
|
1103 The class \f[CB]X\f[R] declared in package \f[CB]p\f[R] is represented by |
|
1104 the file \f[CB]X.java\f[R] in the \f[CB]p\f[R] directory. |
|
1105 .IP \[bu] 2 |
|
1106 The class \f[CB]Y\f[R] declared in package \f[CB]p.q\f[R] is represented by |
|
1107 the file \f[CB]Y.java\f[R] in the \f[CB]q\f[R] subdirectory of directory |
|
1108 \f[CB]p\f[R]. |
|
1109 .IP \[bu] 2 |
|
1110 The class \f[CB]Z\f[R] declared in package \f[CB]p.q.r\f[R] is represented |
|
1111 by the file \f[CB]Z.java\f[R] in the \f[CB]r\f[R] subdirectory of |
|
1112 \f[CB]p\\q\f[R] (on Windows) or \f[CB]p/q\f[R] (on other systems). |
|
1113 .PP |
|
1114 In some situations, it is convenient to split the code into separate |
|
1115 directories, each structured as described above, and the aggregate list |
|
1116 of directories specified to \f[CB]javac\f[R]. |
|
1117 .SS Arrangement of Source Code for a Module |
|
1118 .PP |
|
1119 In the Java language, a module is a set of packages designed for reuse. |
|
1120 In addition to \f[CB]\&.java\f[R] files for classes and interfaces, each |
|
1121 module has a source file called \f[CB]module\-info.java\f[R] which: |
|
1122 .IP "1." 3 |
|
1123 declares the module\[aq]s name; |
|
1124 .IP "2." 3 |
|
1125 lists the packages exported by the module (to allow reuse by other |
|
1126 modules); |
|
1127 .IP "3." 3 |
|
1128 lists other modules required by the module (to reuse their exported |
|
1129 packages). |
|
1130 .PP |
|
1131 When packages are organized into a module, the module is represented by |
|
1132 one or more directories representing the packages in the module, one of |
|
1133 which contains the \f[CB]module\-info.java\f[R] file. |
|
1134 It may be convenient, but it is not required, to use a single directory, |
|
1135 named after the module, to contain the \f[CB]module\-info.java\f[R] file |
|
1136 alongside the directory tree which represents the packages in the module |
|
1137 (i.e., the \f[I]package hierarchy\f[R] described above). |
|
1138 The exact arrangement of source code for a module is typically dictated |
|
1139 by the conventions adopted by a development environment (IDE) or build |
|
1140 system. |
|
1141 .PP |
|
1142 For example: |
|
1143 .IP \[bu] 2 |
|
1144 The module \f[CB]a.b.c\f[R] may be represented by the directory |
|
1145 \f[CB]a.b.c\f[R], on all systems. |
|
1146 .IP \[bu] 2 |
|
1147 The module\[aq]s declaration is represented by the file |
|
1148 \f[CB]module\-info.java\f[R] in the \f[CB]a.b.c\f[R] directory. |
|
1149 .IP \[bu] 2 |
|
1150 If the module contains package \f[CB]p.q.r\f[R], then the \f[CB]a.b.c\f[R] |
|
1151 directory contains the directory tree \f[CB]p\\q\\r\f[R] (on Windows) or |
|
1152 \f[CB]p/q/r\f[R] (on other systems). |
|
1153 .PP |
|
1154 The development environment may prescribe some directory hierarchy |
|
1155 between the directory named for the module and the source files to be |
|
1156 read by \f[CB]javac\f[R]. |
|
1157 .PP |
|
1158 For example: |
|
1159 .IP \[bu] 2 |
|
1160 The module \f[CB]a.b.c\f[R] may be represented by the directory |
|
1161 \f[CB]a.b.c\f[R] |
|
1162 .IP \[bu] 2 |
|
1163 The module\[aq]s declaration and the module\[aq]s packages may be in |
|
1164 some subdirectory of \f[CB]a.b.c\f[R], such as \f[CB]src\\main\\java\f[R] |
|
1165 (on Windows) or \f[CB]src/main/java\f[R] (on other systems). |
|
1166 .SH CONFIGURING A COMPILATION |
|
1167 .PP |
|
1168 This section describes how to configure \f[CB]javac\f[R] to perform a |
|
1169 basic compilation. |
|
1170 .PP |
|
1171 See \f[B]Configuring the Module System\f[R] for additional details for |
|
1172 use when compiling for a release of the platform that supports modules. |
|
1173 .SS Source Files |
|
1174 .IP \[bu] 2 |
|
1175 Specify the source files to be compiled on the command line. |
|
1176 .PP |
|
1177 If there are no compilation errors, the corresponding class files will |
|
1178 be placed in the \f[B]output directory\f[R]. |
|
1179 .PP |
|
1180 Some systems may limit the amount you can put on a command line; to work |
|
1181 around those limits, you can use \f[B]argument files\f[R]. |
|
1182 .PP |
|
1183 When compiling code for modules, you can also specify source files |
|
1184 indirectly, by using the \f[CB]\-\-module\f[R] or \f[CB]\-m\f[R] option; see |
|
1185 \f[B]Standard Options\f[R]. |
|
1186 .SS Output Directory |
|
1187 .IP \[bu] 2 |
|
1188 Use the \f[CB]\-d\f[R] option to specify an output directory in which to |
|
1189 put the compiled class files. |
|
1190 .PP |
|
1191 This will normally be organized in a \f[B]package hierarchy\f[R], unless |
|
1192 you are compiling source code from multiple modules, in which case it |
|
1193 will be organized as a \f[B]module hierarchy\f[R]. |
|
1194 .PP |
|
1195 When the compilation has been completed, if you are compiling one or |
|
1196 more modules, you can place the output directory on the module path for |
|
1197 the Java \f[B]launcher\f[R]; otherwise, you can place the place the |
|
1198 output directory on the class path for the Java launcher. |
|
1199 .SS Precompiled Code |
|
1200 .PP |
|
1201 The code to be compiled may refer to libraries beyond what is provided |
|
1202 by the platform. |
|
1203 If so, you must place these libraries on the class path or module path. |
|
1204 If the library code is not in a module, place it on the class path; if |
|
1205 it is in a module, place it on the module path. |
|
1206 .IP \[bu] 2 |
|
1207 Use the \f[CB]\-\-class\-path\f[R] option to specify libraries to be |
|
1208 placed on the class path. |
|
1209 Locations on the class path should be organized in a \f[B]package |
|
1210 hierarchy\f[R]. |
|
1211 You can also use alternate forms of the option: \f[CB]\-classpath\f[R] or |
|
1212 \f[CB]\-cp\f[R]. |
|
1213 .IP \[bu] 2 |
|
1214 Use the \f[CB]\-\-module\-path\f[R] option to specify libraries to be |
|
1215 placed on the module path. |
|
1216 Locations on the module path should either be modules or directories of |
|
1217 modules. |
|
1218 You can also use an alternate form of the option: \f[CB]\-p\f[R]. |
|
1219 .RS 2 |
|
1220 .PP |
|
1221 See \f[B]Configuring the Module System\f[R] for details on how to modify |
|
1222 the default configuration of library modules. |
|
1223 .RE |
|
1224 .PP |
|
1225 \f[B]Note\f[R]: the options for the class path and module path are not |
|
1226 mutually exclusive, although it is not common to specify the class path |
|
1227 when compiling code for one or more modules. |
|
1228 .SS Additional Source Files |
|
1229 .PP |
|
1230 The code to be compiled may refer to types in additional source files |
|
1231 that are not specified on the command line. |
|
1232 If so, you must put those source files on either the source path or |
|
1233 module path. |
|
1234 You can only specify one of these options: if you are not compiling code |
|
1235 for a module, or if you are only compiling code for a single module, use |
|
1236 the source path; if you are compiling code for multiple modules, use the |
|
1237 module source path. |
|
1238 .IP \[bu] 2 |
|
1239 Use the \f[CB]\-\-source\-path\f[R] option to specify the locations of |
|
1240 additional source files that may be read by javac. |
|
1241 Locations on the source path should be organized in a \f[B]package |
|
1242 hierarchy\f[R]. |
|
1243 You can also use an alternate form of the option: \f[CB]\-sourcepath\f[R]. |
|
1244 .IP \[bu] 2 |
|
1245 Use the \f[CB]\-\-module\-source\-path\f[R] option one or more times to |
|
1246 specify the location of additional source files in different modules |
|
1247 that may be read by javac, or when compiling source files in multiple |
|
1248 modules. |
|
1249 You can either specify the locations for each module |
|
1250 \f[B]individually\f[R], or you can organize the source files so that you |
|
1251 can specify the locations all \f[B]together\f[R]. |
|
1252 For more details, see \f[B]The Module Source Path Option\f[R]. |
|
1253 .PP |
|
1254 If you want to be able to refer to types in additional source files but |
|
1255 do not want them to be compiled, use the \f[CB]\-implicit\f[R] option. |
|
1256 .PP |
|
1257 \f[B]Note\f[R]: if you are compiling code for multiple modules, you must |
|
1258 always specify a module source path, and all source files specified on |
|
1259 the command line must be in one of the directories on the module source |
|
1260 path, or in a subdirectory thereof. |
|
1261 .SS Example of Compiling Multiple Source Files |
|
1262 .PP |
|
1263 This example compiles the \f[CB]Aloha.java\f[R], \f[CB]GutenTag.java\f[R], |
|
1264 \f[CB]Hello.java\f[R], and \f[CB]Hi.java\f[R] source files in the |
|
1265 \f[CB]greetings\f[R] package. |
|
1266 .PP |
|
1267 \f[B]Oracle Solaris, Linux, and macOS:\f[R] |
|
1268 .IP |
|
1269 .nf |
|
1270 \f[CB] |
|
1271 %\ javac\ greetings/*.java |
|
1272 %\ ls\ greetings |
|
1273 Aloha.class\ \ \ \ \ \ \ \ \ GutenTag.class\ \ \ \ \ \ Hello.class\ \ \ \ \ \ \ \ \ Hi.class |
|
1274 Aloha.java\ \ \ \ \ \ \ \ \ \ GutenTag.java\ \ \ \ \ \ \ Hello.java\ \ \ \ \ \ \ \ \ \ Hi.java |
|
1275 \f[R] |
|
1276 .fi |
|
1277 .PP |
|
1278 \f[B]Windows:\f[R] |
|
1279 .IP |
|
1280 .nf |
|
1281 \f[CB] |
|
1282 C:\\>javac\ greetings\\*.java |
|
1283 C:\\>dir\ greetings |
|
1284 Aloha.class\ \ \ \ \ \ \ \ \ GutenTag.class\ \ \ \ \ \ Hello.class\ \ \ \ \ \ \ \ \ Hi.class |
|
1285 Aloha.java\ \ \ \ \ \ \ \ \ \ GutenTag.java\ \ \ \ \ \ \ Hello.java\ \ \ \ \ \ \ \ \ \ Hi.java |
|
1286 \f[R] |
|
1287 .fi |
|
1288 .SS Example of Specifying a User Class Path |
|
1289 .PP |
|
1290 After changing one of the source files in the previous example, |
|
1291 recompile it: |
|
1292 .PP |
|
1293 \f[B]Oracle Solaris, Linux, and macOS:\f[R] |
|
1294 .IP |
|
1295 .nf |
|
1296 \f[CB] |
|
1297 pwd |
|
1298 /examples |
|
1299 javac\ greetings/Hi.java |
|
1300 \f[R] |
|
1301 .fi |
|
1302 .PP |
|
1303 \f[B]Windows:\f[R] |
|
1304 .IP |
|
1305 .nf |
|
1306 \f[CB] |
|
1307 C:\\>cd |
|
1308 \\examples |
|
1309 C:\\>javac\ greetings\\Hi.java |
|
1310 \f[R] |
|
1311 .fi |
|
1312 .PP |
|
1313 Because \f[CB]greetings.Hi\f[R] refers to other classes in the |
|
1314 \f[CB]greetings\f[R] package, the compiler needs to find these other |
|
1315 classes. |
|
1316 The previous example works because the default user class path is the |
|
1317 directory that contains the package directory. |
|
1318 If you want to recompile this file without concern for which directory |
|
1319 you are in, then add the examples directory to the user class path by |
|
1320 setting \f[CB]CLASSPATH\f[R]. |
|
1321 This example uses the \f[CB]\-classpath\f[R] option. |
|
1322 .PP |
|
1323 \f[B]Oracle Solaris, Linux, and macOS:\f[R] |
|
1324 .RS |
|
1325 .PP |
|
1326 \f[CB]javac\ \-classpath\ /examples\ /examples/greetings/Hi.java\f[R] |
|
1327 .RE |
|
1328 .PP |
|
1329 \f[B]Windows:\f[R] |
|
1330 .RS |
|
1331 .PP |
|
1332 \f[CB]C:\\>javac\ \-classpath\ \\examples\ \\examples\\greetings\\Hi.java\f[R] |
|
1333 .RE |
|
1334 .PP |
|
1335 If you change \f[CB]greetings.Hi\f[R] to use a banner utility, then that |
|
1336 utility also needs to be accessible through the user class path. |
|
1337 .PP |
|
1338 \f[B]Oracle Solaris, Linux, and macOS:\f[R] |
|
1339 .IP |
|
1340 .nf |
|
1341 \f[CB] |
|
1342 javac\ \-classpath\ /examples:/lib/Banners.jar\ \\ |
|
1343 \ \ \ \ \ \ \ \ \ \ \ \ /examples/greetings/Hi.java |
|
1344 \f[R] |
|
1345 .fi |
|
1346 .PP |
|
1347 \f[B]Windows:\f[R] |
|
1348 .IP |
|
1349 .nf |
|
1350 \f[CB] |
|
1351 C:\\>javac\ \-classpath\ \\examples;\\lib\\Banners.jar\ ^ |
|
1352 \ \ \ \ \ \ \ \ \ \ \ \ \\examples\\greetings\\Hi.java |
|
1353 \f[R] |
|
1354 .fi |
|
1355 .PP |
|
1356 To execute a class in the \f[CB]greetings\f[R] package, the program needs |
|
1357 access to the \f[CB]greetings\f[R] package, and to the classes that the |
|
1358 \f[CB]greetings\f[R] classes use. |
|
1359 .PP |
|
1360 \f[B]Oracle Solaris, Linux, and macOS:\f[R] |
|
1361 .RS |
|
1362 .PP |
|
1363 \f[CB]java\ \-classpath\ /examples:/lib/Banners.jar\ greetings.Hi\f[R] |
|
1364 .RE |
|
1365 .PP |
|
1366 \f[B]Windows:\f[R] |
|
1367 .RS |
|
1368 .PP |
|
1369 \f[CB]C:\\>java\ \-classpath\ \\examples;\\lib\\Banners.jar\ greetings.Hi\f[R] |
|
1370 .RE |
|
1371 .SH CONFIGURING THE MODULE SYSTEM |
|
1372 .PP |
|
1373 If you want to include additional modules in your compilation, use the |
|
1374 \f[CB]\-\-add\-modules\f[R] option. |
|
1375 This may be necessary when you are compiling code that is not in a |
|
1376 module, or which is in an automatic module, and the code refers to API |
|
1377 in the additional modules. |
|
1378 .PP |
|
1379 If you want to restrict the set of modules in your compilation, use the |
|
1380 \f[CB]\-\-limit\-modules\f[R] option. |
|
1381 This may be useful if you want to ensure that the code you are compiling |
|
1382 is capable of running on a system with a limited set of modules |
|
1383 installed. |
|
1384 .PP |
|
1385 If you want to break encapsulation and specify that additional packages |
|
1386 should be considered as exported from a module, use the |
|
1387 \f[CB]\-\-add\-exports\f[R] option. |
|
1388 This may be useful when performing white\-box testing; relying on access |
|
1389 to internal API in production code is strongly discouraged. |
|
1390 .PP |
|
1391 If you want to specify that additional packages should be considered as |
|
1392 required by a module, use the \f[CB]\-\-add\-reads\f[R] option. |
|
1393 This may be useful when performing white\-box testing; relying on access |
|
1394 to internal API in production code is strongly discouraged. |
|
1395 .PP |
|
1396 You can patch additional content into any module using the |
|
1397 \f[CB]\-\-patch\-module\f[R] option. |
|
1398 See [Patching a Module] for more details. |
|
1399 .SH SEARCHING FOR MODULE, PACKAGE AND TYPE DECLARATIONS |
|
1400 .PP |
|
1401 To compile a source file, the compiler often needs information about a |
|
1402 module or type, but the declaration is not in the source files specified |
|
1403 on the command line. |
|
1404 .PP |
|
1405 \f[CB]javac\f[R] needs type information for every class or interface used, |
|
1406 extended, or implemented in the source file. |
|
1407 This includes classes and interfaces not explicitly mentioned in the |
|
1408 source file, but that provide information through inheritance. |
|
1409 .PP |
|
1410 For example, when you create a subclass of \f[CB]java.awt.Window\f[R], you |
|
1411 are also using the ancestor classes of \f[CB]Window\f[R]: |
|
1412 \f[CB]java.awt.Container\f[R], \f[CB]java.awt.Component\f[R], and |
|
1413 \f[CB]java.lang.Object\f[R]. |
|
1414 .PP |
|
1415 When compiling code for a module, the compiler also needs to have |
|
1416 available the declaration of that module. |
|
1417 .PP |
|
1418 A successful search may produce a class file, a source file, or both. |
|
1419 If both are found, then you can use the \f[CB]\-Xprefer\f[R] option to |
|
1420 instruct the compiler which to use; see \f[B]Extra Options\f[R]. |
|
1421 .PP |
|
1422 If a search finds and uses a source file, then by default \f[CB]javac\f[R] |
|
1423 compiles that source file. |
|
1424 This behavior can be altered with \f[CB]\-implicit\f[R]; see \f[B]Standard |
|
1425 Options\f[R]. |
|
1426 .PP |
|
1427 The compiler might not discover the need for some type information until |
|
1428 after annotation processing completes. |
|
1429 When the type information is found in a source file and no |
|
1430 \f[CB]\-implicit\f[R] option is specified, the compiler gives a warning |
|
1431 that the file is being compiled without being subject to annotation |
|
1432 processing. |
|
1433 To disable the warning, either specify the file on the command line (so |
|
1434 that it will be subject to annotation processing) or use the |
|
1435 \f[CB]\-implicit\f[R] option to specify whether or not class files should |
|
1436 be generated for such source files. |
|
1437 .PP |
|
1438 The way that \f[CB]javac\f[R] locates the declarations of those types |
|
1439 depends on whether the reference exists within code for a module or not. |
|
1440 .SS Searching Package Oriented Paths |
|
1441 .PP |
|
1442 When searching for a source or class file on a path composed of package |
|
1443 oriented locations, \f[CB]javac\f[R] will check each location on the path |
|
1444 in turn for the possible presence of the file. |
|
1445 The first occurrence of a particular file shadows (hides) any subsequent |
|
1446 occurrences of like\-named files. |
|
1447 This shadowing does not affect any search for any files with a different |
|
1448 name. |
|
1449 This can be convenient when searching for source files, which may be |
|
1450 grouped in different locations, such as shared code, platform\-specific |
|
1451 code and generated code. |
|
1452 It can also be useful when injecting alternate versions of a class file |
|
1453 into a package, to debugging or other instrumentation reasons. |
|
1454 But, it can also be dangerous, such as when putting incompatible |
|
1455 different versions of a library on the class path. |
|
1456 .SS Searching Module Oriented Paths |
|
1457 .PP |
|
1458 Prior to scanning any module paths for any package or type declarations, |
|
1459 \f[CB]javac\f[R] will lazily scan the following paths and locations to |
|
1460 determine the modules that will be used in the compilation. |
|
1461 .IP \[bu] 2 |
|
1462 The module source path (see the \f[CB]\-\-module\-source\-path\f[R] |
|
1463 option) |
|
1464 .IP \[bu] 2 |
|
1465 The path for upgradeable modules (see the |
|
1466 \f[CB]\-\-upgrade\-module\-path\f[R] option) |
|
1467 .IP \[bu] 2 |
|
1468 The system modules (see the \f[CB]\-\-system\f[R] option) |
|
1469 .IP \[bu] 2 |
|
1470 The user module path ( see the \f[CB]\-\-module\-path\f[R] option) |
|
1471 .PP |
|
1472 For any module, the first occurrence of the module during the scan |
|
1473 completely shadows (hides) any subsequent appearance of a like\-named |
|
1474 module. |
|
1475 While locating the modules, \f[CB]javac\f[R] is able to determine the |
|
1476 packages exported by the module and to associate with each module a |
|
1477 package oriented path for the contents of the module. |
|
1478 For any previously compiled module, this path will typically be a single |
|
1479 entry for either a directory or a file that provides an internal |
|
1480 directory\-like hierarchy, such as a JAR file. |
|
1481 Thus, when searching for a type that is in a package that is known to be |
|
1482 exported by a module, \f[CB]javac\f[R] can locate the declaration directly |
|
1483 and efficiently. |
|
1484 .SS Searching for the Declaration of a Module |
|
1485 .PP |
|
1486 If the module has been previously compiled, the module declaration is |
|
1487 located in a file named \f[CB]module\-info.class\f[R] in the root of the |
|
1488 package hierarchy for the content of the module. |
|
1489 .PP |
|
1490 If the module is one of those currently being compiled, the module |
|
1491 declaration will be either the file named \f[CB]module\-info.class\f[R] in |
|
1492 the root of the package hierarchy for the module in the class output |
|
1493 directory, or the file named \f[CB]module\-info.java\f[R] in one of the |
|
1494 locations on the source path or one the module source path for the |
|
1495 module. |
|
1496 .SS Searching for the Declaration of a Type When the Reference is not in |
|
1497 a Module |
|
1498 .PP |
|
1499 When searching for a type that is referenced in code that is not in a |
|
1500 module, \f[CB]javac\f[R] will look in the following places: |
|
1501 .IP \[bu] 2 |
|
1502 The platform classes (or the types in exported packages of the platform |
|
1503 modules) (This is for compiled class files only.) |
|
1504 .IP \[bu] 2 |
|
1505 Types in exported packages of any modules on the module path, if |
|
1506 applicable. |
|
1507 (This is for compiled class files only.) |
|
1508 .IP \[bu] 2 |
|
1509 Types in packages on the class path and/or source path: |
|
1510 .RS 2 |
|
1511 .IP \[bu] 2 |
|
1512 If both are specified, \f[CB]javac\f[R] looks for compiled class files on |
|
1513 the class path and for source files on the source path. |
|
1514 .IP \[bu] 2 |
|
1515 If the class path is specified, but not source path, \f[CB]javac\f[R] |
|
1516 looks for both compiled class files and source files on the class path. |
|
1517 .IP \[bu] 2 |
|
1518 If the class path is not specified, it defaults to the current |
|
1519 directory. |
|
1520 .RE |
|
1521 .PP |
|
1522 When looking for a type on the class path and/or source path, if both a |
|
1523 compiled class file and a source file are found, the most recently |
|
1524 modified file will be used by default. |
|
1525 If the source file is newer, it will be compiled and will may override |
|
1526 any previously compiled version of the file. |
|
1527 You can use the \f[CB]\-Xprefer\f[R] option to override the default |
|
1528 behavior. |
|
1529 .SS Searching for the Declaration of a Type When the Reference is in a |
|
1530 Module |
|
1531 .PP |
|
1532 When searching for a type that is referenced in code in a module, |
|
1533 \f[CB]javac\f[R] will examine the declaration of the enclosing module to |
|
1534 determine if the type is in a package that is exported from another |
|
1535 module that is readable by the enclosing module. |
|
1536 If so, \f[CB]javac\f[R] will simply and directly go to the definition of |
|
1537 that module to find the definition of the required type. |
|
1538 Unless the module is another of the modules being compiled, |
|
1539 \f[CB]javac\f[R] will only look for compiled class files files. |
|
1540 In other words, \f[CB]javac\f[R] will not look for source files in |
|
1541 platform modules or modules on the module path. |
|
1542 .PP |
|
1543 If the type being referenced is not in some other readable module, |
|
1544 \f[CB]javac\f[R] will examine the module being compiled to try and find |
|
1545 the declaration of the type. |
|
1546 \f[CB]javac\f[R] will look for the declaration of the type as follows: |
|
1547 .IP \[bu] 2 |
|
1548 Source files specified on the command line or on the source path or |
|
1549 module source path. |
|
1550 .IP \[bu] 2 |
|
1551 Previously compiled files in the output directory. |
|
1552 .SH DIRECTORY HIERARCHIES |
|
1553 .PP |
|
1554 \f[CB]javac\f[R] generally assumes that source files and compiled class |
|
1555 files will be organized in a file system directory hierarchy or in a |
|
1556 type of file that supports in an internal directory hierarchy, such as a |
|
1557 JAR file. |
|
1558 Three different kinds of hierarchy are supported: a \f[I]package |
|
1559 hierarchy\f[R], a \f[I]module hierarchy\f[R], and a \f[I]module source |
|
1560 hierarchy\f[R]. |
|
1561 .PP |
|
1562 While \f[CB]javac\f[R] is fairly relaxed about the organization of source |
|
1563 code, beyond the expectation that source will be organized in one or |
|
1564 package hierarchies, and can generally accomodate organizations |
|
1565 prescribed by development environments and build tools, Java tools in |
|
1566 general, and \f[CB]javac\f[R] and the Java launcher in particular, are |
|
1567 more stringent regarding the organization of compiled class files, and |
|
1568 will be organized in package hierarchies or module hierarchies, as |
|
1569 appropriate. |
|
1570 .PP |
|
1571 The location of these hierarchies are specified to \f[CB]javac\f[R] with |
|
1572 command\-line options, whose names typically end in "path", like |
|
1573 \f[CB]\-\-source\-path\f[R] or \f[CB]\-\-class\-path\f[R]. |
|
1574 Also as a general rule, path options whose name includes the word |
|
1575 \f[CB]module\f[R], like \f[CB]\-\-module\-path\f[R], are used to specify |
|
1576 module hierarchies, although some module\-related path options allow a |
|
1577 package hierarchy to be specified on a per\-module basis. |
|
1578 All other path options are used to specify package hierarchies. |
|
1579 .SS Package Hierarchy |
|
1580 .PP |
|
1581 In a package hierarchy, directories and subdirectories are used to |
|
1582 represent the component parts of the package name, with the source file |
|
1583 or compiled class file for a type being stored as a file with an |
|
1584 extension of \f[CB]\&.java\f[R] or \f[CB]\&.class\f[R] in the most nested |
|
1585 directory. |
|
1586 .PP |
|
1587 For example, in a package hierarchy, the source file for a class |
|
1588 \f[CB]com.example.MyClass\f[R] will be stored in the file |
|
1589 \f[I]com/example/MyClass.java\f[R] |
|
1590 .SS Module Hierarchy |
|
1591 .PP |
|
1592 In a module hierarchy, the first level of directories are named for the |
|
1593 modules in the hierarchy; within each of those directories the contents |
|
1594 of the module are organized in package hierarchies. |
|
1595 .PP |
|
1596 For example, in a module hierarchy, the compiled class file for a type |
|
1597 called \f[CB]com.example.MyClass\f[R] in a module called |
|
1598 \f[CB]my.library\f[R] will be stored in |
|
1599 \f[I]my.library/com/example/MyClass.class\f[R]. |
|
1600 .PP |
|
1601 The various output directories used by \f[CB]javac\f[R] (the class output |
|
1602 directory, the source output directory, and native header output |
|
1603 directory) will all be organized in a module hierarchy when multiple |
|
1604 modules are being compiled. |
|
1605 .SS Module Source Hierarchy |
|
1606 .PP |
|
1607 Although the source for each individual module should always be |
|
1608 organized in a package hierarchy, it may be convenient to group those |
|
1609 hierarchies into a module source hierarchy. |
|
1610 This is similar to a module hierarchy, except that there may be |
|
1611 intervening directories between the directory for the module and the |
|
1612 directory that is the root of the package hierarchy for the source code |
|
1613 of the module. |
|
1614 .PP |
|
1615 For example, in a module source hierarchy, the source file for a type |
|
1616 called \f[CB]com.example.MyClass\f[R] in a module called |
|
1617 \f[CB]my.library\f[R] may be stored in a file such as |
|
1618 \f[I]my.library/src/main/java/com/example/MyClass.java\f[R]. |
|
1619 .SH THE MODULE SOURCE PATH OPTION |
|
1620 .PP |
|
1621 The \f[CB]\-\-module\-source\-path\f[R] option has two forms: a |
|
1622 \f[I]module\-specific form\f[R], in which a package path is given for |
|
1623 each module containing code to be compiled, and a |
|
1624 \f[I]module\-pattern\f[R] form, in which the source path for each module |
|
1625 is specified by a pattern. |
|
1626 The module\-specific form is generally simpler to use when only a small |
|
1627 number of modules are involved; the module\-pattern form may be more |
|
1628 convenient when the number of modules is large and the modules are |
|
1629 organized in a regular manner that can be described by a pattern. |
|
1630 .PP |
|
1631 Multiple instances of the \f[CB]\-\-module\-source\-path\f[R] option may |
|
1632 be given, each one using either the module\-pattern form or the |
|
1633 module\-specific form, subject to the following limitations: |
|
1634 .IP \[bu] 2 |
|
1635 the module\-pattern form may be used at most once |
|
1636 .IP \[bu] 2 |
|
1637 the module\-specific form may be used at most once for any given module |
|
1638 .PP |
|
1639 If the module\-specific form is used for any module, the associated |
|
1640 search path overrides any path that might otherwise have been inferred |
|
1641 from the module\-pattern form. |
|
1642 .SS Module\-specific form |
|
1643 .PP |
|
1644 The module\-specific form allows an explicit search path to be given for |
|
1645 any specific module. |
|
1646 This form is: |
|
1647 .IP \[bu] 2 |
|
1648 \f[CB]\-\-module\-source\-path\f[R] |
|
1649 \f[I]module\-name\f[R]\f[CB]=\f[R]\f[I]file\-path\f[R] |
|
1650 (\f[I]path\-separator\f[R] \f[I]file\-path\f[R])* |
|
1651 .PP |
|
1652 The path separator character is \f[CB];\f[R] on Windows, and \f[CB]:\f[R] |
|
1653 otherwise. |
|
1654 .PP |
|
1655 \f[B]Note:\f[R] this is similar to the form used for the |
|
1656 \f[CB]\-\-patch\-module\f[R] option. |
|
1657 .SS Module\-pattern form |
|
1658 .PP |
|
1659 The module\-pattern form allows a concise specification of the module |
|
1660 source path for any number of modules organized in regular manner. |
|
1661 .IP \[bu] 2 |
|
1662 \f[CB]\-\-module\-source\-path\f[R] \f[I]pattern\f[R] |
|
1663 .PP |
|
1664 The pattern is defined by the following rules, which are applied in |
|
1665 order: |
|
1666 .IP \[bu] 2 |
|
1667 The argument is considered to be a series of segments separated by the |
|
1668 path separator character (\f[CB];\f[R] on Windows, and \f[CB]:\f[R] |
|
1669 otherwise). |
|
1670 .IP \[bu] 2 |
|
1671 Each segment containing curly braces of the form |
|
1672 .RS 2 |
|
1673 .IP |
|
1674 .nf |
|
1675 \f[CB] |
|
1676 string1{alt1\ (\ ,alt2\ )*\ }\ string2 |
|
1677 \f[R] |
|
1678 .fi |
|
1679 .PP |
|
1680 is considered to be replaced by a series of segments formed by |
|
1681 "expanding" the braces: |
|
1682 .IP |
|
1683 .nf |
|
1684 \f[CB] |
|
1685 string1\ alt1\ string2 |
|
1686 string1\ alt2\ string2 |
|
1687 and\ so\ on... |
|
1688 \f[R] |
|
1689 .fi |
|
1690 .PP |
|
1691 The braces may be nested. |
|
1692 .PP |
|
1693 This rule is applied for all such usages of braces. |
|
1694 .RE |
|
1695 .IP \[bu] 2 |
|
1696 Each segment must have at most one asterisk (\f[CB]*\f[R]). |
|
1697 If a segment does not contain an asterisk, it is considered to be as |
|
1698 though the file separator character and an asterisk are appended. |
|
1699 .RS 2 |
|
1700 .PP |
|
1701 For any module \f[I]M\f[R], the source path for that module is formed |
|
1702 from the series of segments obtained by substituting the module name |
|
1703 \f[I]M\f[R] for the asterisk in each segment. |
|
1704 .PP |
|
1705 \f[B]Note\f[R]: in this context, the asterisk is just used as a special |
|
1706 marker, to denote the position in the path of the module name. |
|
1707 It should not be confused with the use of \f[CB]*\f[R] as a file name |
|
1708 wildcard character, as found on most operating systems. |
|
1709 .RE |
|
1710 .SH PATCHING MODULES |
|
1711 .PP |
|
1712 javac allows any content, whether in source or compiled form, to be |
|
1713 patched into any module using the \f[CB]\-\-patch\-module\f[R] option. |
|
1714 You may want to do this to compile alternative implementations of a |
|
1715 class to be patched at runtime into a JVM, or to inject additional |
|
1716 classes into the module, such as when testing. |
|
1717 .PP |
|
1718 The form of the option is: |
|
1719 .IP \[bu] 2 |
|
1720 \f[CB]\-\-patch\-module\f[R] |
|
1721 \f[I]module\-name\f[R]\f[CB]=\f[R]\f[I]file\-path\f[R] |
|
1722 (\f[I]path\-separator\f[R] \f[I]file\-path\f[R] )* |
|
1723 .PP |
|
1724 The path separator character is \f[CB];\f[R] on Windows, and \f[CB]:\f[R] |
|
1725 otherwise. |
|
1726 The paths given for the module must specify the root of a package |
|
1727 hierarchy for the contents of the module |
|
1728 .PP |
|
1729 The option may be given at most once for any given module. |
|
1730 Any content on the path will hide any like\-named content later in the |
|
1731 path and in the patched module. |
|
1732 .PP |
|
1733 When patching source code into more than one module, the |
|
1734 \f[CB]\-\-module\-source\-path\f[R] must also be used, so that the output |
|
1735 directory is organized in a module hierarchy, and capable of holding the |
|
1736 compiled class files for the modules being compiled. |
|
1737 .SH ANNOTATION PROCESSING |
|
1738 .PP |
|
1739 The \f[CB]javac\f[R] command provides direct support for annotation |
|
1740 processing. |
|
1741 .PP |
|
1742 The API for annotation processors is defined in the |
|
1743 \f[CB]javax.annotation.processing\f[R] and \f[CB]javax.lang.model\f[R] |
|
1744 packages and subpackages. |
|
1745 .SS How Annotation Processing Works |
|
1746 .PP |
|
1747 Unless annotation processing is disabled with the \f[CB]\-proc:none\f[R] |
|
1748 option, the compiler searches for any annotation processors that are |
|
1749 available. |
|
1750 The search path can be specified with the \f[CB]\-processorpath\f[R] |
|
1751 option. |
|
1752 If no path is specified, then the user class path is used. |
|
1753 Processors are located by means of service provider\-configuration files |
|
1754 named \f[CB]META\-INF/services/javax.annotation.processing\f[R]. |
|
1755 Processor on the search path. |
|
1756 Such files should contain the names of any annotation processors to be |
|
1757 used, listed one per line. |
|
1758 Alternatively, processors can be specified explicitly, using the |
|
1759 \f[CB]\-processor\f[R] option. |
|
1760 .PP |
|
1761 After scanning the source files and classes on the command line to |
|
1762 determine what annotations are present, the compiler queries the |
|
1763 processors to determine what annotations they process. |
|
1764 When a match is found, the processor is called. |
|
1765 A processor can claim the annotations it processes, in which case no |
|
1766 further attempt is made to find any processors for those annotations. |
|
1767 After all of the annotations are claimed, the compiler does not search |
|
1768 for additional processors. |
|
1769 .PP |
|
1770 If any processors generate new source files, then another round of |
|
1771 annotation processing occurs: Any newly generated source files are |
|
1772 scanned, and the annotations processed as before. |
|
1773 Any processors called on previous rounds are also called on all |
|
1774 subsequent rounds. |
|
1775 This continues until no new source files are generated. |
|
1776 .PP |
|
1777 After a round occurs where no new source files are generated, the |
|
1778 annotation processors are called one last time, to give them a chance to |
|
1779 complete any remaining work. |
|
1780 Finally, unless the \f[CB]\-proc:only\f[R] option is used, the compiler |
|
1781 compiles the original and all generated source files. |
|
1782 .PP |
|
1783 If you use an annotation processor that generates additional source |
|
1784 files to be included in the compilation, you can specify a default |
|
1785 module to be used for the newly generated files, for use when a module |
|
1786 declaration is not also generated. |
|
1787 In this case, use the \f[CB]\-\-default\-module\-for\-created\-files\f[R] |
|
1788 option. |
|
1789 .SS Compilation Environment and Runtime Environment. |
|
1790 .PP |
|
1791 The declarations in source files and previously compiled class files are |
|
1792 analyzed by \f[CB]javac\f[R] in a \f[I]compilation environment\f[R] that is |
|
1793 distinct from the \f[I]runtime environment\f[R] used to execute |
|
1794 \f[CB]javac\f[R] itself. |
|
1795 Although there is a deliberate similarity between many \f[CB]javac\f[R] |
|
1796 options and like\-named options for the Java \f[B]launcher\f[R], such as |
|
1797 \f[CB]\-\-class\-path\f[R], \f[CB]\-\-module\-path\f[R] and so on, it is |
|
1798 important to understand that in general the \f[CB]javac\f[R] options just |
|
1799 affect the environment in which the source files are compiled, and do |
|
1800 not affect the operation of \f[CB]javac\f[R] itself. |
|
1801 .PP |
|
1802 The distinction between the compilation environment and runtime |
|
1803 environment is significant when it comes to using annotation processors. |
|
1804 Although annotations processors process elements (declarations) that |
|
1805 exist in the compilation environment, the annotation processor itself is |
|
1806 executed in the runtime environment. |
|
1807 If an annotation processor has dependencies on libraries that are not in |
|
1808 modules, the libraries can be placed, along with the annotation |
|
1809 processor itself, on the processor path. |
|
1810 (See the \f[CB]\-\-processor\-path\f[R] option.) If the annotation |
|
1811 processor and its dependencies are in modules, you should use the |
|
1812 processor module path instead. |
|
1813 (See the \f[CB]\-\-processor\-module\-path\f[R] option.) When those are |
|
1814 insufficient, it may be necessary to provide further configuration of |
|
1815 the runtime environment. |
|
1816 This can be done in two ways: |
|
1817 .IP "1." 3 |
|
1818 If \f[CB]javac\f[R] is invoked from the command line, options can be |
|
1819 passed to the underlying runtime by prefixing the option with |
|
1820 \f[CB]\-J\f[R]. |
|
1821 (See the \f[CB]\-J\f[R] option.) |
|
1822 .IP "2." 3 |
|
1823 You can start an instance of a Java Virtual Machine directly and use |
|
1824 command line options and API to configure an environment in which |
|
1825 \f[CB]javac\f[R] can be invoked via one of its \f[B]APIs\f[R]. |
|
1826 .SH COMPILING FOR EARLIER RELEASES OF THE PLATFORM |
|
1827 .PP |
|
1828 \f[CB]javac\f[R] can compile code that is to be used on other releases of |
|
1829 the platform, using either the \f[CB]\-\-release\f[R] option, or the |
|
1830 \f[CB]\-\-source\f[R]/\f[CB]\-source\f[R] and |
|
1831 \f[CB]\-\-target\f[R]/\f[CB]\-target\f[R] options, together with additional |
|
1832 options to specify the platform classes. |
|
1833 .PP |
|
1834 Depending on the desired platform release, there are some restrictions |
|
1835 on some of the options that can be used. |
|
1836 .IP \[bu] 2 |
|
1837 When compiling for JDK 8 and earlier releases, you cannot use any option |
|
1838 that is intended for use with the module system. |
|
1839 This includes all of the following options: |
|
1840 .RS 2 |
|
1841 .IP \[bu] 2 |
|
1842 \f[CB]\-\-module\-source\-path\f[R], \f[CB]\-\-upgrade\-module\-path\f[R], |
|
1843 \f[CB]\-\-system\f[R], \f[CB]\-\-module\-path\f[R], |
|
1844 \f[CB]\-\-add\-modules\f[R], \f[CB]\-\-add\-exports\f[R], |
|
1845 \f[CB]\-\-add\-opens\f[R], \f[CB]\-\-add\-reads\f[R], |
|
1846 \f[CB]\-\-limit\-modules\f[R], \f[CB]\-\-patch\-module\f[R] |
|
1847 .PP |
|
1848 If you use the \f[CB]\-\-source\f[R]/\f[CB]\-source\f[R] or |
|
1849 \f[CB]\-\-target\f[R]/\f[CB]\-target\f[R] options, you should also set the |
|
1850 appropriate platform classes using the boot class path family of |
|
1851 options. |
|
1852 .RE |
|
1853 .IP \[bu] 2 |
|
1854 When compiling for JDK 9 and later releases, you cannot use any option |
|
1855 that is intended to configure the boot class path. |
|
1856 This includes all of the following options: |
|
1857 .RS 2 |
|
1858 .IP \[bu] 2 |
|
1859 \f[CB]\-Xbootclasspath/p:\f[R], \f[CB]\-Xbootclasspath\f[R], |
|
1860 \f[CB]\-Xbootclasspath/a:\f[R], \f[CB]\-endorseddirs\f[R], |
|
1861 \f[CB]\-Djava.endorsed.dirs\f[R], \f[CB]\-extdirs\f[R], |
|
1862 \f[CB]\-Djava.ext.dirs\f[R], \f[CB]\-profile\f[R] |
|
1863 .PP |
|
1864 If you use the \f[CB]\-\-source\f[R]/\f[CB]\-source\f[R] or |
|
1865 \f[CB]\-\-target\f[R]/\f[CB]\-target\f[R] options, you should also set the |
|
1866 appropriate platform classes using the \f[CB]\-\-system\f[R] option to |
|
1867 give the location of an appropriate installed release of JDK. |
|
1868 .RE |
|
1869 .PP |
|
1870 When using the \f[CB]\-\-release\f[R] option, only the supported |
|
1871 documented API for that release may be used; you cannot use any options |
|
1872 to break encapsulation to access any internal classes. |
|
1873 .SH APIS |
|
1874 .PP |
|
1875 The \f[CB]javac\f[R] compiler can be invoked using an API in three |
|
1876 different ways: |
|
1877 .TP |
|
1878 .B The \f[B]Java Compiler API\f[R] |
|
1879 This provides the most flexible way to invoke the compiler, including |
|
1880 the ability to compile source files provided in memory buffers or other |
|
1881 non\-standard file systems. |
|
1882 .RS |
|
1883 .RE |
|
1884 .TP |
|
1885 .B The \f[B]ToolProvider API\f[R] |
|
1886 A \f[CB]ToolProvider\f[R] for \f[CB]javac\f[R] can be obtained by calling |
|
1887 \f[CB]ToolProvider.findFirst("javac")\f[R]. |
|
1888 This returns an object with the equivalent functionality of the |
|
1889 command\-line tool. |
|
1890 .RS |
|
1891 .PP |
|
1892 \f[B]Note\f[R]: This API should not be confused with the like\-named API |
|
1893 in the \f[B]\f[BC]javax.tools\f[B]\f[R] package. |
|
1894 .RE |
|
1895 .TP |
|
1896 .B The \f[CB]javac\f[R] \f[B]Legacy API\f[R] |
|
1897 This API is retained for backward compatibility only. |
|
1898 All new code should use either the Java Compiler API or the ToolProvider |
|
1899 API. |
|
1900 .RS |
|
1901 .RE |
|
1902 .PP |
|
1903 \f[B]Note:\f[R] All other classes and methods found in a package with |
|
1904 names that start with \f[CB]com.sun.tools.javac\f[R] (subpackages of |
|
1905 \f[CB]com.sun.tools.javac\f[R]) are strictly internal and subject to |
|
1906 change at any time. |
1043 .SH EXAMPLES OF USING \-XLINT KEYS |
1907 .SH EXAMPLES OF USING \-XLINT KEYS |
1044 .TP |
1908 .TP |
1045 .B \f[CB]cast\f[R] |
1909 .B \f[CB]cast\f[R] |
1046 Warns about unnecessary and redundant casts, for example: |
1910 Warns about unnecessary and redundant casts, for example: |
1047 .RS |
1911 .RS |
1489 \f[R] |
2351 \f[R] |
1490 .fi |
2352 .fi |
1491 .PP |
2353 .PP |
1492 When the compiler encounters a varargs method, it translates the |
2354 When the compiler encounters a varargs method, it translates the |
1493 \f[CB]varargs\f[R] formal parameter into an array. |
2355 \f[CB]varargs\f[R] formal parameter into an array. |
1494 However, the Java programming language doesn\[aq]t permit the creation |
2356 However, the Java programming language does not permit the creation of |
1495 of arrays of parameterized types. |
2357 arrays of parameterized types. |
1496 In the method \f[CB]ArrayBuilder.addToList\f[R], the compiler translates |
2358 In the method \f[CB]ArrayBuilder.addToList\f[R], the compiler translates |
1497 the \f[CB]varargs\f[R] formal parameter \f[CB]T...\f[R] elements to the |
2359 the \f[CB]varargs\f[R] formal parameter \f[CB]T...\f[R] elements to the |
1498 formal parameter \f[CB]T[]\f[R] elements, an array. |
2360 formal parameter \f[CB]T[]\f[R] elements, an array. |
1499 However, because of type erasure, the compiler converts the |
2361 However, because of type erasure, the compiler converts the |
1500 \f[CB]varargs\f[R] formal parameter to \f[CB]Object[]\f[R] elements. |
2362 \f[CB]varargs\f[R] formal parameter to \f[CB]Object[]\f[R] elements. |
1501 Consequently, there\[aq]s a possibility of heap pollution. |
2363 Consequently, there\[aq]s a possibility of heap pollution. |
1502 .RE |
2364 .RE |
1503 .SH EXAMPLE OF COMPILING BY PROVIDING COMMAND\-LINE ARGUMENTS |
|
1504 .PP |
|
1505 To compile as though providing command\-line arguments, use the |
|
1506 following syntax: |
|
1507 .RS |
|
1508 .PP |
|
1509 \f[CB]JavaCompiler\ javac\ =\ ToolProvider.getSystemJavaCompiler();\f[R] |
|
1510 .RE |
|
1511 .PP |
|
1512 The example writes diagnostics to the standard output stream and returns |
|
1513 the exit code that \f[CB]javac\f[R] command would give when called from |
|
1514 the command line. |
|
1515 .PP |
|
1516 You can use other methods in the \f[CB]javax.tools.JavaCompiler\f[R] |
|
1517 interface to handle diagnostics, control where files are read from and |
|
1518 written to, and more. |
|
1519 .SH OLD INTERFACE |
|
1520 .PP |
|
1521 \f[B]Note:\f[R] |
|
1522 .PP |
|
1523 This API is retained for backward compatibility only. |
|
1524 All new code should use the Java Compiler API. |
|
1525 .PP |
|
1526 The \f[CB]com.sun.tools.javac.Main\f[R] class provides two static methods |
|
1527 to call the compiler from a program: |
|
1528 .IP |
|
1529 .nf |
|
1530 \f[CB] |
|
1531 public\ static\ int\ compile(String[]\ args); |
|
1532 public\ static\ int\ compile(String[]\ args,\ PrintWriter\ out); |
|
1533 \f[R] |
|
1534 .fi |
|
1535 .PP |
|
1536 The \f[CB]args\f[R] parameter represents any of the command\-line |
|
1537 arguments that would typically be passed to the compiler. |
|
1538 .PP |
|
1539 The \f[CB]out\f[R] parameter indicates where the compiler diagnostic |
|
1540 output is directed. |
|
1541 .PP |
|
1542 The \f[CB]return\f[R] value is equivalent to the \f[CB]exit\f[R] value from |
|
1543 \f[CB]javac\f[R]. |
|
1544 .PP |
|
1545 \f[B]Note:\f[R] |
|
1546 .PP |
|
1547 All other classes and methods found in a package with names that start |
|
1548 with \f[CB]com.sun.tools.javac\f[R] (subpackages of |
|
1549 \f[CB]com.sun.tools.javac\f[R]) are strictly internal and subject to |
|
1550 change at any time. |
|
1551 .SH EXAMPLE OF COMPILING MULTIPLE SOURCE FILES |
|
1552 .PP |
|
1553 This example compiles the \f[CB]Aloha.java\f[R], \f[CB]GutenTag.java\f[R], |
|
1554 \f[CB]Hello.java\f[R], and \f[CB]Hi.java\f[R] source files in the |
|
1555 \f[CB]greetings\f[R] package. |
|
1556 .PP |
|
1557 \f[B]Oracle Solaris, Linux, and OS X:\f[R] |
|
1558 .IP |
|
1559 .nf |
|
1560 \f[CB] |
|
1561 %\ javac\ greetings/*.java |
|
1562 %\ ls\ greetings |
|
1563 Aloha.class\ \ \ \ \ \ \ \ \ GutenTag.class\ \ \ \ \ \ Hello.class\ \ \ \ \ \ \ \ \ Hi.class |
|
1564 Aloha.java\ \ \ \ \ \ \ \ \ \ GutenTag.java\ \ \ \ \ \ \ Hello.java\ \ \ \ \ \ \ \ \ \ Hi.java |
|
1565 \f[R] |
|
1566 .fi |
|
1567 .PP |
|
1568 \f[B]Windows:\f[R] |
|
1569 .IP |
|
1570 .nf |
|
1571 \f[CB] |
|
1572 C:\\>javac\ greetings\\*.java |
|
1573 C:\\>dir\ greetings |
|
1574 Aloha.class\ \ \ \ \ \ \ \ \ GutenTag.class\ \ \ \ \ \ Hello.class\ \ \ \ \ \ \ \ \ Hi.class |
|
1575 Aloha.java\ \ \ \ \ \ \ \ \ \ GutenTag.java\ \ \ \ \ \ \ Hello.java\ \ \ \ \ \ \ \ \ \ Hi.java |
|
1576 \f[R] |
|
1577 .fi |
|
1578 .SH EXAMPLE OF SPECIFYING A USER CLASS PATH |
|
1579 .PP |
|
1580 After changing one of the source files in the previous example, |
|
1581 recompile it: |
|
1582 .PP |
|
1583 \f[B]Oracle Solaris, Linux, and OS X:\f[R] |
|
1584 .IP |
|
1585 .nf |
|
1586 \f[CB] |
|
1587 pwd |
|
1588 /examples |
|
1589 javac\ greetings/Hi.java |
|
1590 \f[R] |
|
1591 .fi |
|
1592 .PP |
|
1593 \f[B]Windows:\f[R] |
|
1594 .IP |
|
1595 .nf |
|
1596 \f[CB] |
|
1597 C:\\>cd |
|
1598 \\examples |
|
1599 C:\\>javac\ greetings\\Hi.java |
|
1600 \f[R] |
|
1601 .fi |
|
1602 .PP |
|
1603 Because \f[CB]greetings.Hi\f[R] refers to other classes in the |
|
1604 \f[CB]greetings\f[R] package, the compiler needs to find these other |
|
1605 classes. |
|
1606 The previous example works because the default user class path is the |
|
1607 directory that contains the package directory. |
|
1608 If you want to recompile this file without concern for which directory |
|
1609 you are in, then add the examples directory to the user class path by |
|
1610 setting \f[CB]CLASSPATH\f[R]. |
|
1611 This example uses the \f[CB]\-classpath\f[R] option. |
|
1612 .PP |
|
1613 \f[B]Oracle Solaris, Linux, and OS X:\f[R] |
|
1614 .RS |
|
1615 .PP |
|
1616 \f[CB]javac\ \-classpath\ /examples\ /examples/greetings/Hi.java\f[R] |
|
1617 .RE |
|
1618 .PP |
|
1619 \f[B]Windows:\f[R] |
|
1620 .RS |
|
1621 .PP |
|
1622 \f[CB]C:\\>javac\ \-classpath\ \\examples\ \\examples\\greetings\\Hi.java\f[R] |
|
1623 .RE |
|
1624 .PP |
|
1625 If you change \f[CB]greetings.Hi\f[R] to use a banner utility, then that |
|
1626 utility also needs to be accessible through the user class path. |
|
1627 .PP |
|
1628 \f[B]Oracle Solaris, Linux, and OS X:\f[R] |
|
1629 .IP |
|
1630 .nf |
|
1631 \f[CB] |
|
1632 javac\ \-classpath\ /examples:/lib/Banners.jar\ \\ |
|
1633 \ \ \ \ \ \ \ \ \ \ \ \ /examples/greetings/Hi.java |
|
1634 \f[R] |
|
1635 .fi |
|
1636 .PP |
|
1637 \f[B]Windows:\f[R] |
|
1638 .IP |
|
1639 .nf |
|
1640 \f[CB] |
|
1641 C:\\>javac\ \-classpath\ \\examples;\\lib\\Banners.jar\ ^ |
|
1642 \ \ \ \ \ \ \ \ \ \ \ \ \\examples\\greetings\\Hi.java |
|
1643 \f[R] |
|
1644 .fi |
|
1645 .PP |
|
1646 To execute a class in the \f[CB]greetings\f[R] package, the program needs |
|
1647 access to the \f[CB]greetings\f[R] package, and to the classes that the |
|
1648 \f[CB]greetings\f[R] classes use. |
|
1649 .PP |
|
1650 \f[B]Oracle Solaris, Linux, and OS X:\f[R] |
|
1651 .RS |
|
1652 .PP |
|
1653 \f[CB]java\ \-classpath\ /examples:/lib/Banners.jar\ greetings.Hi\f[R] |
|
1654 .RE |
|
1655 .PP |
|
1656 \f[B]Windows:\f[R] |
|
1657 .RS |
|
1658 .PP |
|
1659 \f[CB]C:\\>java\ \-classpath\ \\examples;\\lib\\Banners.jar\ greetings.Hi\f[R] |
|
1660 .RE |
|
1661 .PP |
|
1662 The \f[CB]\-source\ 1.7\f[R] option specifies that release 1.7 (or 7) of |
|
1663 the Java programming language must be used to compile OldCode.java. |
|
1664 The \f[CB]\-target\ 1.7\f[R] option ensures that the generated class files |
|
1665 are compatible with JVM 1.7. |
|
1666 .SH ANNOTATION PROCESSING |
|
1667 .PP |
|
1668 The \f[CB]javac\f[R] command provides direct support for annotation |
|
1669 processing, superseding the need for the separate annotation processing |
|
1670 command, \f[CB]apt\f[R]. |
|
1671 .PP |
|
1672 The API for annotation processors is defined in the |
|
1673 \f[CB]javax.annotation.processing\f[R] and \f[CB]javax.lang.model\f[R] |
|
1674 packages and subpackages. |
|
1675 .SS How Annotation Processing Works |
|
1676 .PP |
|
1677 Unless annotation processing is disabled with the \f[CB]\-proc:none\f[R] |
|
1678 option, the compiler searches for any annotation processors that are |
|
1679 available. |
|
1680 The search path can be specified with the \f[CB]\-processorpath\f[R] |
|
1681 option. |
|
1682 If no path is specified, then the user class path is used. |
|
1683 Processors are located by means of service provider\-configuration files |
|
1684 named \f[CB]META\-INF/services/javax.annotation.processing\f[R]. |
|
1685 Processor on the search path. |
|
1686 Such files should contain the names of any annotation processors to be |
|
1687 used, listed one per line. |
|
1688 Alternatively, processors can be specified explicitly, using the |
|
1689 \f[CB]\-processor\f[R] option. |
|
1690 .PP |
|
1691 After scanning the source files and classes on the command line to |
|
1692 determine what annotations are present, the compiler queries the |
|
1693 processors to determine what annotations they process. |
|
1694 When a match is found, the processor is called. |
|
1695 A processor can claim the annotations it processes, in which case no |
|
1696 further attempt is made to find any processors for those annotations. |
|
1697 After all of the annotations are claimed, the compiler does not search |
|
1698 for additional processors. |
|
1699 .PP |
|
1700 If any processors generate new source files, then another round of |
|
1701 annotation processing occurs: Any newly generated source files are |
|
1702 scanned, and the annotations processed as before. |
|
1703 Any processors called on previous rounds are also called on all |
|
1704 subsequent rounds. |
|
1705 This continues until no new source files are generated. |
|
1706 .PP |
|
1707 After a round occurs where no new source files are generated, the |
|
1708 annotation processors are called one last time, to give them a chance to |
|
1709 complete any remaining work. |
|
1710 Finally, unless the \f[CB]\-proc:only\f[R] option is used, the compiler |
|
1711 compiles the original and all generated source files. |
|
1712 .SH SEARCHING FOR TYPES |
|
1713 .PP |
|
1714 To compile a source file, the compiler often needs information about a |
|
1715 type, but the type definition is not in the source files specified on |
|
1716 the command line. |
|
1717 .PP |
|
1718 The compiler needs type information for every class or interface used, |
|
1719 extended, or implemented in the source file. |
|
1720 This includes classes and interfaces not explicitly mentioned in the |
|
1721 source file, but that provide information through inheritance. |
|
1722 .PP |
|
1723 For example, when you create a subclass of \f[CB]java.awt.Window\f[R], you |
|
1724 are also using the ancestor classes of \f[CB]Window\f[R]: |
|
1725 \f[CB]java.awt.Container\f[R], \f[CB]java.awt.Component\f[R], and |
|
1726 \f[CB]java.lang.Object\f[R]. |
|
1727 .PP |
|
1728 When the compiler needs type information, it searches for a source file |
|
1729 or class file that defines the type. |
|
1730 The compiler searches for class files first in the bootstrap and |
|
1731 extension classes, then in the user class path (which by default is the |
|
1732 current directory). |
|
1733 The user class path is defined by setting the \f[CB]CLASSPATH\f[R] |
|
1734 environment variable or by using the \f[CB]\-classpath\f[R] option. |
|
1735 .PP |
|
1736 If you set the \f[CB]\-sourcepath\f[R] option, then the compiler searches |
|
1737 the indicated path for source files. |
|
1738 Otherwise, the compiler searches the user class path for both class |
|
1739 files and source files. |
|
1740 .PP |
|
1741 You can specify different bootstrap or extension classes with the |
|
1742 \f[CB]\-bootclasspath\f[R] and the \f[CB]\-extdirs\f[R] options. |
|
1743 See \f[B]Cross\-Compilation Options for javac\f[R]. |
|
1744 .PP |
|
1745 A successful type search may produce a class file, a source file, or |
|
1746 both. |
|
1747 If both are found, then you can use the \f[CB]\-Xprefer\f[R] option to |
|
1748 instruct the compiler which to use. |
|
1749 If \f[CB]newer\f[R] is specified, then the compiler uses the newer of the |
|
1750 two files. |
|
1751 If \f[CB]source\f[R] is specified, the compiler uses the source file. |
|
1752 The default is \f[CB]newer\f[R]. |
|
1753 .PP |
|
1754 If a type search finds a source file for a required type, either by |
|
1755 itself, or as a result of the setting for the \f[CB]\-Xprefer\f[R] option, |
|
1756 then the compiler reads the source file to get the information it needs. |
|
1757 By default the compiler also compiles the source file. |
|
1758 You can use the \f[CB]\-implicit\f[R] option to specify the behavior. |
|
1759 If \f[CB]none\f[R] is specified, then no class files are generated for the |
|
1760 source file. |
|
1761 If \f[CB]class\f[R] is specified, then class files are generated for the |
|
1762 source file. |
|
1763 .PP |
|
1764 The compiler might not discover the need for some type information until |
|
1765 after annotation processing completes. |
|
1766 When the type information is found in a source file and no |
|
1767 \f[CB]\-implicit\f[R] option is specified, the compiler gives a warning |
|
1768 that the file is being compiled without being subject to annotation |
|
1769 processing. |
|
1770 To disable the warning, either specify the file on the command line (so |
|
1771 that it will be subject to annotation processing) or use the |
|
1772 \f[CB]\-implicit\f[R] option to specify whether or not class files should |
|
1773 be generated for such source files. |
|