# Module jdk.compiler

Defines the implementation of the system Java compiler and its command line equivalent, javac.

## javac

This module provides the equivalent of command-line access to javac via the `ToolProvider` and `Tool` service provider interfaces (SPIs), and more flexible access via the `JavaCompiler` SPI.

Instances of the tools can be obtained by calling `ToolProvider.findFirst` or the service loader with the name `"javac"`.

In addition, instances of `JavaCompiler.CompilationTask` obtained from JavaCompiler can be downcast to `JavacTask` for access to lower level aspects of javac, such as the `Abstract Syntax Tree` (AST).

This module uses the `FileSystemProvider` API to locate file system providers. In particular, this means that a jar file system provider, such as that in the `jdk.zipfs` module, must be available if the compiler is to be able to read JAR files.

Tool Guides:
  javac

Module Graph:
Since:
  9

### Packages

Exports
Package | Description
--- | ---
com.sun.source.doctree | Provides interfaces to represent documentation comments as abstract syntax trees (AST).
com.sun.source.tree | Provides interfaces to represent source code as abstract syntax trees (AST).
com.sun.source.util | Provides utilities for operations on abstract syntax trees (AST).
com.sun.tools.javac | This package provides a legacy entry point for the javac tool.

Indirect Exports
From | Packages
--- | ---
java.compiler | javax.annotation.processing javax.lang.model javax.lang.model.element javax.lang.model.type javax.lang.model.util javax.tools

### Modules

Requires
Modifier | Module | Description
--- | --- | ---
transitive | java.compiler | Defines the Language Model, Annotation Processing, and Java Compiler APIs.

### Services

Provides
Type | Description
--- | ---
JavaCompiler |
Tool |
ToolProvider |

Uses
Type | Description
--- | ---
Plugin | The interface for a javac plug-in.
Processor | The interface for an annotation processor.