Модуль jdk.compiler
Пакеты com.sun.source.* предоставляют API дерева компилятора: API для доступа к абстрактным деревьям (AST), представляющим исходный код Java и комментарии к документации, используемые в javac, javadoc и связанных инструментах.
javac
Этот модуль предоставляет эквивалент командной строки доступа к javac через ToolProvider и Tool интерфейсы поставщиков услуг (SPI) и более гибкий доступ через JavaCompiler SPI.
Экземпляры инструментов можно получить, вызвав ToolProvider.findFirst или загрузчик услуг с именем "javac".
Кроме того, экземпляры JavaCompiler.CompilationTask, полученные из JavaCompiler, могут быть применены к JavacTask для доступа к аспектам javac более низкого уровня, таким как Abstract Syntax Tree (AST).
Этот модуль использует FileSystemProvider API для поиска поставщиков файловых систем. В частности, это означает, что поставщик файловой системы JAR, например, в модуле jdk.zipfs, должен быть доступен, если компилятор должен иметь возможность читать файлы JAR.
Параметры и переменные среды
Полный набор параметров и переменных среды, поддерживаемых javac, приведен в Руководстве по инструменту javac. Однако существуют некоторые ограничения при вызове компилятора через его API.Параметр
-Jне поддерживается. Любые необходимые параметры виртуальной машины должны быть установлены в виртуальной машине, используемой для вызова API.IllegalArgumentExceptionбудет вызван, если параметр используется при вызове инструмента черезJavaCompilerAPI; об ошибке будет сообщено, если параметр используется при вызове javac черезToolProviderили устаревшийMainAPI.Функция «подстановка класса» не поддерживается. Эта функция поддерживается только родным загрузчиком. При вызове инструмента через его API все необходимые файлы jar должны быть включены непосредственно в параметр
--class-pathили переменную средыCLASSPATH. При вызове инструмента через его API все компоненты пути класса будут восприняты буквально и будут проигнорированы, если соответствующий каталог или файл не найден. Параметр-Xlint:pathsможет использоваться для вывода предупреждений о недостающих компонентах.
JavaCompiler. Файлы аргументов (так называемые @-файлы) не поддерживаются. Содержимое таких файлов должно быть включено непосредственно в список параметров, предоставляемых при вызове инструмента через этот API.
IllegalArgumentExceptionбудет вызван, если параметр используется при вызове инструмента через этот API.Переменная среды
JDK_JAVAC_OPTIONSне поддерживается. Любые параметры, определенные в переменной среды, должны быть включены непосредственно в список параметров, предоставляемых при вызове API; любые значения в переменной среды будут проигнорированы.Параметры, используемые только для получения информации (например,
--help,--help-extended,--versionи--full-version), не поддерживаются.IllegalArgumentExceptionбудет вызван, если любой из этих параметров используется при вызове инструмента через этот API.- Параметры, связанные с путем, зависят от менеджера файлов, используемого при вызове
JavaCompiler.getTask(java.io.Writer, javax.tools.JavaFileManager, javax.tools.DiagnosticListener<? super javax.tools.JavaFileObject>, java.lang.Iterable<java.lang.String>, java.lang.Iterable<java.lang.String>, java.lang.Iterable<? extends javax.tools.JavaFileObject>). Стандартные параметры, такие как--class-path,--module-path, и так далее, доступны при использовании менеджера файлов по умолчанию или производного от него. Эти параметры могут быть недоступны и могут быть доступны другие параметры при использовании другого менеджера файлов.IllegalArgumentExceptionбудет вызван, если любой параметр, неизвестный инструменту или менеджеру файлов, используется при вызове инструмента через этот API.
CLASSPATH учитывается при вызове компилятора через его API, хотя такой способ использования не рекомендуется. Переменная среды не может быть сброшена после запуска виртуальной машины, поэтому рекомендуется убедиться, что переменная среды не установлена при запуске виртуальной машины, которая будет использоваться для вызова компилятора. Однако, если значение было установлено, любое такое значение может быть переопределено с помощью параметра --class-path при вызове компилятора или установкой StandardLocation.CLASS_PATH в менеджере файлов при вызове компилятора через интерфейс JavaCompiler. SuppressWarnings
JLS 9.6.4.5 определяет ряд строк, которые могут использоваться для подавления предупреждений, которые могут генерироваться компилятором Java. Кроме того, javac также поддерживает другие строки, которые могут использоваться для подавления других видов предупреждений. В следующей таблице перечислены все строки, которые могут использоваться с@SuppressWarnings. | Строка | Подавление предупреждений об ... |
|---|---|
auxiliaryclass |
вспомогательный класс, скрытый в исходном файле и используемый из других файлов |
cast |
использование ненужных приведений типов |
classfile |
проблемы, связанные с содержимым файла класса |
deprecation |
использование устаревших элементов |
dep-ann |
элементы, помеченные как устаревшие в комментарии к документации, но не использующие аннотацию @Deprecated |
divzero |
деление на константу целого числа 0 |
empty |
пустое оператор после if |
exports |
проблемы, связанные с экспортом модулей |
fallthrough |
пропускание от одного случая оператора switch к следующему |
finally |
finally блоки, которые не завершаются нормально |
lossy-conversions |
возможные потери при преобразованиях в составных операциях присваивания |
missing-explicit-ctor |
отсутствие явных конструкторов в публичных и защищенных классах в экспортируемых пакетах |
module |
проблемы, связанные с системой модулей |
opens |
проблемы, связанные с открытием модулей |
overloads |
проблемы, связанные с перегрузкой методов |
overrides |
проблемы, связанные с переопределением методов |
path |
некорректные элементы пути в командной строке |
preview |
использование предварительных языковых функций |
rawtypes |
использование необработанных типов |
removal |
использование API, который был помечен для удаления |
requires-automatic |
использование автоматических модулей в requires блоках |
requires-transitive-automatic |
автоматические модули в requires transitive |
serial |
классы Serializable, у которых отсутствует поле serialVersionUID, или другие подозрительные объявления в классах и интерфейсах Serializable и Externalizable |
static |
обращение к статическому члену с использованием экземпляра |
strictfp |
ненужное использование модификатора strictfp |
synchronization |
попытки синхронизации на экземплярах классов с основой на значении |
text-blocks |
несоответствующие символы пробелов в отступах текстовых блоков |
this-escape |
конструктор суперкласса раскрывает this перед инициализацией подкласса |
try |
проблемы, связанные с использованием try блоков (то есть try-with-resources) |
unchecked |
неопределённые операции |
varargs |
потенциально небезопасные методы vararg |
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, 2023, 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/21/docs/api/jdk.compiler/module-summary.html