Модуль jdk.compiler
Пакеты 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. При вызове инструмента через 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 поддерживает и другие строки, позволяющие подавлять другие виды предупреждений. В следующей таблице перечислены все строки, распознаваемые javac в аннотациях@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: | Строка | Предупреждения, связанные с ... |
|---|---|
classfile |
проблемами, связанными с содержимым class-файлов |
incubating |
использованием инкубаторных модулей |
options |
проблемами, связанными с использованием параметров командной строки |
output-file-clash |
перезаписью выходных файлов из-за совпадения имён файлов |
path |
недопустимыми элементами пути в командной строке |
processing |
проблемами, связанными с обработкой аннотаций |
restricted |
использованием ограниченных методов |
- Граф модулей:
- Руководства по инструментам:
- 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.