Spec-Zone.ru › OpenJDK 25

Модуль jdk.compiler

module jdk.compiler
Определяет реализацию системного компилятора Java и его эквивалент для командной строки — javac.

Пакеты 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. При использовании этого параметра для вызова инструмента через API JavaCompiler будет выброшено IllegalArgumentException; при использовании параметра для вызова javac через ToolProvider или устаревший API Main будет выведено сообщение об ошибке.

  • Функция «маски подстановки в 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.
Строки, поддерживаемые 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 синтаксических проблемах, обнаруженных в комментариях документации
Граф модулей:
Module graph for jdk.compilerModule graph for jdk.compiler
Руководства по инструментам:
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
Интерфейс процессора аннотаций.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API