Spec-Zone.ru › OpenJDK 27

Модуль jdk.compiler

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

Пакеты com.sun.source.* предоставляют Compiler Tree 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 поддерживает и другие строки, позволяющие подавлять другие виды предупреждений. В следующей таблице перечислены все строки, распознаваемые javac в аннотациях @SuppressWarnings. Нераспознанные строки игнорируются.
Строки, поддерживаемые SuppressWarnings
Строка Подавляемые предупреждения о ...
auxiliaryclass вспомогательном классе, скрытом в исходном файле и используемом в других файлах
cast использовании ненужных приведений типов
dangling-doc-comments проблемах, связанных с «висячими» комментариями документации, не прикреплёнными к объявлению
deprecation использовании устаревших элементов
dep-ann элементах, помеченных как устаревшие в комментарии документации, но не аннотацией @Deprecated
divzero делении на целочисленную константу 0
empty пустом операторе после if
exports проблемах, связанных с экспортом модулей
fallthrough переходе от одного варианта оператора switch к следующему
finally finally-предложениях, завершающихся ненормально
identity использовании класса со значениями там, где ожидается класс идентичности
lossy-conversions возможной потере точности при составных присваиваниях или побитовых сдвигах (более чем на ±31 бит для целых чисел или ±63 бита для long)
missing-explicit-ctor отсутствии явных конструкторов в открытых и защищённых классах экспортируемых пакетов
module проблемах, связанных с системой модулей
opens проблемах, связанных с открытием модулей
overloads проблемах, связанных с перегрузкой методов
overrides проблемах, связанных с переопределением методов
preview использовании предварительных языковых функций
rawtypes использовании типов без параметров
removal использовании API, помеченного для удаления
requires-automatic использовании автоматических модулей в предложениях requires
requires-transitive-automatic автоматических модулях в requires transitive
restricted использовании ограниченных методов
serial классах Serializable без поля serialVersionUID или других подозрительных объявлениях в классах Serializable и Externalizable и интерфейсах
static доступе к статическому члену через экземпляр
strictfp ненужном использовании модификатора strictfp
synchronization устаревшем синониме для identity с тем же эффектом. Пользователям рекомендуется использовать identity вместо synchronization во всех текущих и будущих случаях.
text-blocks несогласованных пробельных символах в отступах текстового блока
this-escape утечке this из конструктора суперкласса до инициализации подкласса
try проблемах, связанных с использованием блоков try (то есть try-with-resources)
unchecked непроверяемых операциях
varargs потенциально небезопасных методах с переменным числом аргументов
doclint:accessibility проблемах доступности, обнаруженных в комментариях документации
doclint:all всех проблемах, обнаруженных в комментариях документации
doclint:html проблемах HTML, обнаруженных в комментариях документации
doclint:missing отсутствующих элементах в комментариях документации
doclint:reference проблемах ссылок, обнаруженных в комментариях документации
doclint:syntax синтаксических проблемах, обнаруженных в комментариях документации
Все перечисленные выше строки, кроме docllint:, также можно использовать с флагом командной строки -Xlint. Флаг -Xlint также поддерживает следующие строки, не поддерживаемые @SuppressWarnings:
Строки, поддерживаемые -Xlint, но не SuppressWarnings
Строка Предупреждения, связанные с ...
classfile проблемами, связанными с содержимым class-файлов
incubating использованием инкубаторных модулей
options проблемами, связанными с использованием параметров командной строки
output-file-clash перезаписью выходных файлов из-за совпадения имён файлов
path недопустимыми элементами пути в командной строке
processing проблемами, связанными с обработкой аннотаций
restricted использованием ограниченных методов
Граф модулей:
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, 2026, 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.

Spec-Zone.ru

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