Модуль jdk.compiler
Пакеты com.sun.source.* предоставляют API дерева компилятора: API для доступа к абстрактным деревьям (AST), представляющим исходный код Java и комментарии к документации, которые используются javac, javadoc и связанными инструментами.
javac
Этот модуль предоставляет эквивалент доступа к javac из командной строки через интерфейсы поставщиков служб (SPI) ToolProvider и Tool, а также более гибкий доступ через SPI JavaCompiler.
Экземпляры инструментов можно получить, вызвав ToolProvider.findFirst или используя загрузчик служб с именем "javac".
Кроме того, экземпляры JavaCompiler.CompilationTask, полученные из JavaCompiler, можно привести к типу JavacTask для доступа к низкоуровневым аспектам javac, таким как Abstract Syntax Tree (AST).
Этот модуль использует API FileSystemProvider для поиска поставщиков файловых систем. В частности, это означает, что поставщик файловой системы для JAR, например входящий в модуль jdk.zipfs, должен быть доступен, чтобы компилятор мог читать файлы JAR.
Параметры и переменные среды
Полный список параметров и переменных среды, поддерживаемых javac, приведен в руководстве по инструменту javac. Однако при вызове компилятора через его API действуют некоторые ограничения.Параметр
-Jне поддерживается. Все необходимые параметры VM должны быть заданы в VM, используемой для вызова API. При использовании этого параметра для вызова инструмента через APIJavaCompilerбудет выброшеноIllegalArgumentException; при использовании параметра для вызова javac черезToolProviderили устаревший APIMainбудет выведено сообщение об ошибке.Функция «маски подстановки в classpath» не поддерживается. Она поддерживается только нативным средством запуска. При вызове инструмента через его API все необходимые файлы JAR следует непосредственно включить в параметр
--class-pathили переменную средыCLASSPATH. При вызове инструмента через его API все элементы пути к классам рассматриваются буквально и игнорируются, если им не соответствует каталог или файл. Параметр-Xlint:pathsможно использовать для вывода предупреждений об отсутствующих элементах.
JavaCompiler действуют следующие ограничения. Файлы аргументов (так называемые @-файлы) не поддерживаются. Содержимое таких файлов следует непосредственно включить в список параметров, передаваемый при вызове инструмента через этот API. При использовании этого параметра для вызова инструмента через данный API будет выброшено
IllegalArgumentException.Переменная среды
JDK_JAVAC_OPTIONSне поддерживается. Все параметры, заданные в этой переменной среды, следует непосредственно включить в список параметров, передаваемый при вызове API; любые значения этой переменной среды будут проигнорированы.Параметры, используемые только для получения информации (например,
--help,--help-extended,--versionи--full-version), не поддерживаются. При использовании любого из этих параметров для вызова инструмента через данный API будет выброшеноIllegalArgumentException.- Параметры, относящиеся к путям, зависят от диспетчера файлов, используемого при вызове
JavaCompiler.getTask(Writer, JavaFileManager, DiagnosticListener, Iterable, Iterable, Iterable). «Стандартные» параметры, такие как--class-path,--module-pathи т. д., доступны при использовании диспетчера файлов по умолчанию или производного от него. При использовании другого диспетчера файлов эти параметры могут быть недоступны, а вместо них могут быть доступны другие параметры. При использовании для вызова инструмента через данный API параметра, неизвестного инструменту или диспетчеру файлов, будет выброшеноIllegalArgumentException.
CLASSPATH учитывается при вызове компилятора через его API, хотя такой способ использования не рекомендуется. После запуска VM переменную среды нельзя удалить, поэтому рекомендуется убедиться, что она не задана при запуске VM, используемой для вызова компилятора. Однако если значение задано, его можно переопределить с помощью параметра --class-path при вызове компилятора либо установить StandardLocation.CLASS_PATH в диспетчере файлов при вызове компилятора через интерфейс JavaCompiler. SuppressWarnings
В JLS 9.6.4.5 указано несколько строк, с помощью которых можно подавлять предупреждения, генерируемые компилятором Java. Кроме того, javac поддерживает и другие строки для подавления предупреждений других типов. В следующей таблице перечислены все строки, которые можно использовать с@SuppressWarnings. | Строка | Подавляемые предупреждения о… |
|---|---|
auxiliaryclass |
вспомогательном классе, скрытом в исходном файле и используемом в других файлах |
cast |
использовании ненужных приведений типов |
classfile |
проблемах, связанных с содержимым class-файлов |
dangling-doc-comments |
проблемах, связанных с «висящими» комментариями документации, не привязанными к объявлению |
deprecation |
использовании устаревших элементов |
dep-ann |
элементах, помеченных как устаревшие в комментарии документации, но не аннотацией @Deprecated |
divzero |
делении на постоянную целочисленную величину 0 |
empty |
пустом операторе после if |
exports |
проблемах, связанных с экспортом модулей |
fallthrough |
переходе из одной ветви case оператора switch к следующей |
finally |
finally-предложениях, которые завершаются не нормально |
identity |
использовании класса, основанного на значениях, там, где ожидается класс с идентичностью |
incubating |
использовании инкубационных модулей |
lossy-conversions |
возможных потерях точности при составном присваивании |
missing-explicit-ctor |
отсутствии явных конструкторов в открытых и защищенных классах экспортируемых пакетов |
module |
проблемах, связанных с системой модулей |
opens |
проблемах, связанных с открытием модулей |
overloads |
проблемах, связанных с перегрузкой методов |
overrides |
проблемах, связанных с переопределением методов |
path |
недопустимых элементах пути в командной строке |
preview |
использовании предварительных функций языка |
rawtypes |
использовании типов без параметров |
removal |
использовании API, помеченного для удаления |
restricted |
использовании методов с ограничениями |
requires-automatic |
использовании автоматических модулей в предложениях requires |
requires-transitive-automatic |
автоматических модулях в requires transitive |
serial |
классах Serializable, в которых отсутствует поле serialVersionUID, или других подозрительных объявлениях в классах Serializable и Externalizable и интерфейсах |
static |
доступе к статическому члену через экземпляр |
strictfp |
ненужном использовании модификатора strictfp |
synchronization |
попытках синхронизации экземпляров классов, основанных на значениях; этот ключ является устаревшим псевдонимом identity, имеющим те же области применения и эффекты. Для всех будущих и существующих случаев использования synchronization рекомендуется применять категорию identity |
text-blocks |
несогласованных символах пробельных символов в отступах текстового блока |
this-escape |
утечке this конструктором суперкласса до инициализации подкласса |
try |
проблемах, связанных с использованием блоков try (то есть try-with-resources) |
unchecked |
непроверяемых операциях |
varargs |
потенциально небезопасных методах с varargs |
doclint:accessibility |
проблемах доступности, обнаруженных в комментариях документации |
doclint:all |
всех проблемах, обнаруженных в комментариях документации |
doclint:html |
проблемах HTML, обнаруженных в комментариях документации |
doclint:missing |
отсутствующих элементах в комментариях документации |
doclint:reference |
проблемах со ссылками, обнаруженных в комментариях документации |
doclint:syntax |
синтаксических проблемах, обнаруженных в комментариях документации |
- Граф модулей:
- Руководства по инструментам:
- javac
- Начиная с версии:
- 9
Пакеты
| Пакет | Описание |
|---|---|
| com.sun.source.doctree | Предоставляет интерфейсы для представления комментариев документации в виде абстрактных синтаксических деревьев (AST). |
| com.sun.source.tree | Предоставляет интерфейсы для представления исходного кода в виде абстрактных синтаксических деревьев (AST). |
| com.sun.source.util | Предоставляет утилиты для выполнения операций над абстрактными синтаксическими деревьями (AST). |
| com.sun.tools.javac | Этот пакет предоставляет устаревшую точку входа для инструмента javac. |
| Из модуля | Пакеты |
|---|---|
| java.compiler | javax.annotation.processing javax.lang.model javax.lang.model.element javax.lang.model.type javax.lang.model.util javax.tools |
Модули
| Модификатор | Модуль | Описание |
|---|---|---|
| transitive | java.compiler | Определяет API языковой модели, обработки аннотаций и компилятора Java. |
Службы
| Тип | Описание |
|---|---|
| JavaCompiler | Интерфейс для вызова компиляторов языка программирования Java из программ. |
| Tool | Общий интерфейс инструментов, которые можно вызывать из программы. |
| ToolProvider | Используйте ToolProvider.findFirst("javac"), чтобы получить экземпляр ToolProvider, предоставляющего эквивалент доступа к инструменту javac из командной строки. |
| Тип | Описание |
|---|---|
| Plugin | Интерфейс подключаемого модуля javac. |
| Processor | Интерфейс процессора аннотаций. |
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/jdk.compiler/module-summary.html