Spec-Zone.ru › Bazel 8.0

Правила Java

Правила

  • java_binary
  • java_import
  • java_library
  • java_test
  • java_package_configuration
  • java_plugin
  • java_runtime
  • java_toolchain

java_binary

java_binary(name, deps, srcs, data, resources, add_exports, add_opens, args, bootclasspath, classpath_resources, compatible_with, create_executable, deploy_env, deploy_manifest_lines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, javacopts, jvm_flags, launcher, licenses, main_class, neverlink, output_licenses, plugins, resource_strip_prefix, restricted_to, runtime_deps, stamp, tags, target_compatible_with, testonly, toolchains, use_launcher, use_testrunner, visibility)

Создаёт Java архив ("jar-файл"), плюс оболочку командной строки с тем же именем, что и правило. Оболочка командной строки использует путь к классам, включающий, среди прочего, jar-файл для каждой библиотеки, от которой зависит двоичный файл. При выполнении оболочки командной строки любая непустая JAVABIN переменная среды будет иметь приоритет над версией, указанной через флаг Bazel --java_runtime_version.

Оболочка скрипта принимает несколько уникальных флагов. Список настраиваемых флагов и переменных среды, принимаемых оболочкой, см. в //src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt.

Неявные целевые объекты вывода

  • name.jar: Java архив, содержащий файлы классов и другие ресурсы, соответствующие прямым зависимостям двоичного файла.
  • name-src.jar: Архив, содержащий исходные файлы ("исходный jar-файл").
  • name_deploy.jar: Java архив, подходящий для развертывания (создаётся только при явном запросе).

    Построение целевого объекта <name>_deploy.jar для вашего правила создаёт автономный jar-файл с манифестом, позволяющим запустить его с помощью команды java -jar или с помощью опции оболочки скрипта --singlejar. Использование оболочки скрипта предпочтительнее java -jar, потому что оно также передаёт флаги JVM и опции для загрузки нативных библиотек.

    Jar-файл для развертывания содержит все классы, которые были бы найдены загрузчиком классов, который искал бы путь к классам из оболочки скрипта двоичного файла от начала до конца. Он также содержит нативные библиотеки, необходимые для зависимостей. Они автоматически загружаются в JVM во время выполнения.

    Если ваш целевой объект указывает атрибут launcher, то вместо обычного JAR-файла _deploy.jar будет являться нативным двоичным файлом. Он будет содержать загрузчик плюс любые нативные (C++) зависимости вашего правила, все объединённые в один статический двоичный файл. Байты фактического jar-файла будут добавлены к этому нативному двоичному файлу, создавая один двоичный блок, содержащий как исполняемый файл, так и Java-код. Вы можете напрямую выполнить полученный jar-файл так же, как вы выполняете любой нативный двоичный файл.

  • name_deploy-src.jar: Архив, содержащий исходные файлы, собранные из транзитивного замыкания целевого объекта. Они будут соответствовать классам в deploy.jar, за исключением случаев, когда jar-файлы не имеют соответствующего исходного jar-файла.

Хорошей практикой является использование имени исходного файла, являющегося основной точкой входа приложения (без расширения). Например, если ваша точка входа называется Main.java, то ваше имя может быть Main.

Атрибут deps не разрешён в правиле java_binary без srcs; такое правило требует атрибута main_class, предоставленного runtime_deps.

Следующий фрагмент кода иллюстрирует распространённую ошибку:


java_binary(
    name = "DontDoThis",
    srcs = [
        ...,
        "GeneratedJavaFile.java",  # a generated .java file
    ],
    deps = [":generating_rule",],  # rule that generates that file
)

Сделайте так вместо этого:


java_binary(
    name = "DoThisInstead",
    srcs = [
        ...,
        ":generating_rule",
    ],
)

Аргументы

Атрибуты
name

Имя; обязательно

Уникальное имя для этой цели.

deps

Список меток; значение по умолчанию []

Список других библиотек, которые нужно подключить к цели. См. общие замечания о deps в Типичные атрибуты, определённые большинством правил построения.
srcs

Список меток; значение по умолчанию []

Список исходных файлов, которые обрабатываются для создания цели. Этот атрибут почти всегда необходим; см. исключения ниже.

Исходные файлы типа .java компилируются. В случае сгенерированных .java файлов, рекомендуется указать здесь имя правила генерации, а не имя файла. Это не только улучшает читаемость, но и повышает устойчивость правила к будущим изменениям: если правило генерации будет генерировать разные файлы в будущем, вам нужно будет исправить только одно место: outs правила генерации. Вы не должны перечислять правило генерации в deps, так как это бесполезно.

Исходные файлы типа .srcjar распаковываются и компилируются. (Это полезно, если вам нужно сгенерировать набор .java файлов с помощью genrule.)

Правила: если правило (обычно genrule или filegroup) генерирует любой из перечисленных выше файлов, они будут использоваться так же, как и описано для исходных файлов.

Этот аргумент почти всегда требуется, за исключением случаев, когда атрибут main_class указывает класс в runtime classpath или вы указываете аргумент runtime_deps.

data

Список меток; значение по умолчанию []

Список файлов, необходимых этой библиотеке во время выполнения. См. общие замечания о data в Типичные атрибуты, определённые большинством правил построения.
resources

Список меток; значение по умолчанию []

Список файлов данных для включения в Java jar.

Ресурсы могут быть исходными или сгенерированными файлами.

Если ресурсы указаны, они будут упакованы в jar вместе с обычными .class файлами, созданными компиляцией. Расположение ресурсов внутри файла jar определяется структурой проекта. Bazel сначала ищет стандартную структуру каталогов Maven'a (стандартная структура каталогов), (каталог "src" со вложенным каталогом "resources"). Если он не найден, Bazel ищет самый верхний каталог с именем "java" или "javatests" (например, если ресурс находится по пути <workspace root>/x/java/y/java/z, путь к ресурсу будет y/java/z. Этот эвристический поиск нельзя переопределить, однако, атрибут resource_strip_prefix можно использовать для указания альтернативного каталога для файлов ресурсов).

add_exports

Список строк; значение по умолчанию []

Разрешить этой библиотеке доступ к заданным module или package.

Это соответствует флагам javac и JVM --add-exports=.

add_opens

Список строк; значение по умолчанию []

Разрешить этой библиотеке рефлексивный доступ к заданным module или package.

Это соответствует флагам javac и JVM --add-opens=.

bootclasspath

Метка; значение по умолчанию None

Ограниченный API, не использовать!
classpath_resources

Список меток; значение по умолчанию []

НЕ ИСПОЛЬЗОВАТЬ ЭТОТ ВАРИАНТ, ЕСЛИ ЕСТЬ ДРУГИЕ ВОЗМОЖНОСТИ

Список ресурсов, которые должны находиться в корне дерева java. Цель этого атрибута – поддержка сторонних библиотек, требующих, чтобы их ресурсы были найдены в classpath точно как "myconfig.xml". Он разрешён только для бинарных файлов, а не для библиотек, из-за опасности конфликтов имён.

create_executable

Булево значение; значение по умолчанию True

Устарело, используйте java_single_jar вместо этого.
deploy_env

Список меток; значение по умолчанию []

Список других java_binary целей, которые представляют среду развертывания для этого бинарного файла. Установите этот атрибут при создании плагина, который будет загружен другим java_binary.
Установка этого атрибута исключает все зависимости из runtime classpath (и deploy jar) этого бинарного файла, которые общие между этим бинарным файлом и целями, указанными в deploy_env.
deploy_manifest_lines

Список строк; значение по умолчанию []

Список строк для добавления в файл META-INF/manifest.mf для цели *_deploy.jar. Содержимое этого атрибута не подвержено подстановке "Переменных make".
javacopts

Список строк; значение по умолчанию []

Дополнительные параметры компилятора для этого бинарного файла. Подвергается подстановке "Переменных make" и разбору токенов Bourne shell.

Эти параметры компилятора передаются javac после глобальных параметров компилятора.

jvm_flags

Список строк; значение по умолчанию []

Список флагов для включения в сценарий оболочки, сгенерированный для запуска этого бинарного файла. Подвергается подстановке $(location) и "Переменных make", а также разбору токенов Bourne shell.

Сценарий оболочки для Java-бинарного файла включает определение CLASSPATH (для поиска всех зависимых jar) и вызывает нужный интерпретатор Java. Команда, сгенерированная сценарием оболочки, включает имя главного класса, за которым следует "$@", так что вы можете передать другие аргументы после имени класса. Однако аргументы, предназначенные для обработки JVM, должны быть указаны перед именем класса в командной строке. Содержимое jvm_flags добавляется к сценарию оболочки до перечисления имени класса.

Обратите внимание, что этот атрибут не оказывает никакого влияния на *_deploy.jar выходные данные.

launcher

Метка; значение по умолчанию None

Укажите бинарный файл, который будет использоваться для запуска вашей Java-программы вместо обычной bin/java программы, включённой в JDK. Цель должна быть cc_binary. Любой cc_binary файл, который реализует Java Invocation API, может быть указан в качестве значения для этого атрибута.

По умолчанию Bazel будет использовать обычный загрузчик JDK (bin/java или java.exe).

Связанный флаг Bazel --java_launcher влияет только на те java_binary и java_test цели, которые не указали атрибут launcher.

Обратите внимание, что ваши родные (C++, SWIG, JNI) зависимости будут построены по-разному в зависимости от того, используете ли вы загрузчик JDK или другой загрузчик:

  • Если вы используете обычный загрузчик JDK (по умолчанию), родные зависимости строятся как общая библиотека с именем {name}_nativedeps.so, где {name} – это атрибут name правила java_binary. Неиспользуемый код не удаляется компоновщиком в этой конфигурации.
  • Если вы используете любой другой загрузчик, родные (C++) зависимости статически подключаются к бинарному файлу с именем {name}_nativedeps, где {name} – это атрибут name правила java_binary. В этом случае компоновщик удалит любой код, который, по его мнению, не используется, из результирующего бинарного файла, что означает, что любой код C++, доступный только через JNI, может не быть подключен, если эта cc_library цель не указывает alwayslink = True.

При использовании любого загрузчика, отличного от стандартного загрузчика JDK, формат выходных данных *_deploy.jar меняется. Подробности см. в основных документах к java_binary.

main_class

Строка; значение по умолчанию ""

Имя класса с методом main() для использования в качестве точки входа. Если правило использует этот параметр, оно не нуждается в списке srcs=[...]. Таким образом, с помощью этого атрибута можно создать исполняемый файл из Java-библиотеки, которая уже содержит один или несколько методов main().

Значение этого атрибута – имя класса, а не имя исходного файла. Класс должен быть доступен во время выполнения: он может быть скомпилирован этим правилом (из srcs или предоставляться прямыми или транзитивными зависимостями (через runtime_deps или deps). Если класс недоступен, бинарный файл завершится ошибкой во время выполнения; проверки во время сборки нет.

neverlink

Булево значение; значение по умолчанию False

plugins

Список меток; значение по умолчанию []

Плагины компилятора Java для запуска во время компиляции. Каждый java_plugin плагин, указанный в этом атрибуте, будет запущен при каждом построении этого правила. Библиотека также может унаследовать плагины от зависимостей, которые используют exported_plugins. Ресурсы, сгенерированные плагином, будут включены в результирующий jar этого правила.
resource_strip_prefix

Строка; значение по умолчанию ""

Префикс пути для удаления из Java-ресурсов.

Если указан, этот префикс пути удаляется из каждого файла в атрибуте resources. Ошибка возникает, если файл ресурса не находится в этом каталоге. Если не указан (значение по умолчанию), путь к файлу ресурса определяется по той же логике, что и пакет Java исходных файлов. Например, исходный файл по пути stuff/java/foo/bar/a.txt будет находиться по пути foo/bar/a.txt.

runtime_deps

Список меток; по умолчанию []

Библиотеки, которые должны быть доступны для конечного двоичного файла или теста только во время выполнения. Как и обычные deps, они будут появляться в пути класса во время выполнения, но, в отличие от них, не в пути класса во время компиляции. Зависимости, необходимые только во время выполнения, должны быть перечислены здесь. Инструменты анализа зависимостей должны игнорировать целевые элементы, которые присутствуют как в runtime_deps, так и в deps.
stamp

Целое число; по умолчанию -1

Следует ли кодировать информацию о сборке в двоичный файл. Возможные значения:
  • stamp = 1: Всегда добавлять информацию о сборке в двоичный файл, даже в --nostamp сборках. Этот параметр следует избегать, так как он потенциально приводит к отказу от кэширования удаленных данных для двоичного файла и любых последующих действий, зависящих от него.
  • stamp = 0: Всегда заменять информацию о сборке постоянными значениями. Это обеспечивает хорошее кэширование результатов сборки.
  • stamp = -1: Встраивание информации о сборке контролируется флагом --[no]stamp.

Отмеченные двоичные файлы не перестраиваются, если не изменены их зависимости.

use_launcher

Булево; по умолчанию True

Использует ли двоичный файл пользовательский загрузчик.

Если этот атрибут установлен в значение false, атрибут launcher и связанный с ним флаг --java_launcher будут игнорироваться для этого целевого элемента.

use_testrunner

Булево; по умолчанию False

Используйте класс запускателя тестов (по умолчанию com.google.testing.junit.runner.BazelTestRunner) в качестве основной точки входа для Java-программы и предоставьте класс тестов запускателю тестов в качестве значения системной переменной bazel.test_suite.
Это позволяет переопределить стандартное поведение, которое заключается в использовании запускателя тестов для java_test правил и не использовать его для java_binary правил. Вероятность того, что вам потребуется это сделать, низка. Одно из применений — для AllTest правил, вызываемых другим правилом (например, для настройки базы данных перед запуском тестов). Правило AllTest должно быть объявлено как java_binary, но все равно должно использовать запускатель тестов в качестве основной точки входа. Имя класса запускателя тестов можно переопределить с помощью атрибута main_class.

java_import

java_import(name, deps, data, add_exports, add_opens, compatible_with, constraints, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, toolchains, visibility)

Это правило позволяет использовать предварительно скомпилированные .jar файлы в качестве библиотек для java_library и java_binary правил.

Примеры


    java_import(
        name = "maven_model",
        jars = [
            "maven_model/maven-aether-provider-3.2.3.jar",
            "maven_model/maven-model-3.2.3.jar",
            "maven_model/maven-model-builder-3.2.3.jar",
        ],
    )

Аргументы

Атрибуты
name

Имя; обязательно

Уникальное имя для этого целевого элемента.

deps

Список меток; по умолчанию []

Список других библиотек, которые нужно подключить к целевому элементу. См. java_library.deps.
data

Список меток; по умолчанию []

Список файлов, необходимых этому правилу во время выполнения.
add_exports

Список строк; по умолчанию []

Разрешить этой библиотеке доступ к указанным module или package.

Это соответствует флагам javac и JVM --add-exports=.

add_opens

Список строк; по умолчанию []

Разрешить этой библиотеке рефлексивный доступ к указанным module или package.

Это соответствует флагам javac и JVM --add-opens=.

constraints

Список строк; по умолчанию []

Дополнительные ограничения, налагаемые на это правило как на Java-библиотеку.
exports

Список меток; по умолчанию []

Целевые элементы, которые необходимо сделать доступными для пользователей этого правила. См. java_library.exports.
jars

Список меток; обязательно

Список JAR-файлов, предоставляемых Java-целевым элементам, которые зависят от этого целевого элемента.
neverlink

Булево; по умолчанию False

Используйте эту библиотеку только для компиляции, а не во время выполнения. Полезно, если библиотека будет предоставлена средой выполнения во время выполнения. Примерами таких библиотек являются API IDE для плагинов IDE или tools.jar для чего-либо, работающего на стандартной JDK.
proguard_specs

Список меток; по умолчанию []

Файлы, используемые в качестве спецификаций Proguard. Они описывают набор спецификаций, которые должны использоваться Proguard. Если указаны, они будут добавлены к любому android_binary целевому элементу, зависящему от этой библиотеки. Файлы, включенные здесь, должны содержать только идемпотентные правила, а именно -dontnote, -dontwarn, assumenosideeffects и правила, начинающиеся с -keep. Другие параметры могут появляться только в android_binary proguard_specs для обеспечения неавтологичных слияний.
runtime_deps

Список меток; по умолчанию []

Библиотеки, которые должны быть доступны для конечного двоичного файла или теста только во время выполнения. См. java_library.runtime_deps.
srcjar

Метка; по умолчанию None

JAR-файл, содержащий исходный код скомпилированных JAR-файлов.

java_library

java_library(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exported_plugins, exports, features, javabuilder_jvm_flags, javacopts, licenses, neverlink, plugins, proguard_specs, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, toolchains, visibility)

Это правило компилирует и связывает исходные данные в .jar файл.

Неявные выходные данные

  • libname.jar: Java-архив, содержащий файлы классов.
  • libname-src.jar: Архив, содержащий исходные коды ("исходный JAR-архив").

Аргументы

Атрибуты
name

Имя; обязательно

Уникальное имя для этой цели.

deps

Список меток; значение по умолчанию []

Список библиотек, которые нужно подключить к этой библиотеке. См. общие замечания о deps в Типичные атрибуты, определенные большинством правил сборки.

JAR-файлы, созданные правилами java_library в списке deps, будут находиться на пути класса во время компиляции. Кроме того, транзитивное замыкание их deps, runtime_deps и exports будет находиться на пути класса во время выполнения.

В отличие от этого, цели в атрибуте data включаются в runfiles, но не на пути класса во время компиляции и во время выполнения.

srcs

Список меток; значение по умолчанию []

Список исходных файлов, которые обрабатываются для создания цели. Этот атрибут почти всегда требуется; см. исключения ниже.

Исходные файлы типа .java компилируются. В случае сгенерированных .java файлов рекомендуется указать здесь имя правила генерации, а не имя самого файла. Это не только улучшает читаемость, но и делает правило более устойчивым к будущим изменениям: если правило генерации сгенерирует разные файлы в будущем, вам нужно исправить только одно место: outs правила генерации. Вы не должны включать правило генерации в deps, потому что это бесполезно.

Исходные файлы типа .srcjar распаковываются и компилируются. (Это полезно, если вам нужно сгенерировать набор .java файлов с помощью genrule.)

Правила: если правило (обычно genrule или filegroup) генерирует любой из перечисленных выше файлов, они будут использоваться так же, как описано для исходных файлов.

Исходные файлы типа .properties обрабатываются как ресурсы.

Все остальные файлы игнорируются, если есть хотя бы один файл указанного выше типа. В противном случае возникает ошибка.

Этот аргумент почти всегда требуется, за исключением случаев, когда вы указываете аргумент runtime_deps.

data

Список меток; значение по умолчанию []

Список файлов, необходимых для этой библиотеки во время выполнения. См. общие замечания о data в Типичные атрибуты, определенные большинством правил сборки.

При сборке java_library, Bazel не помещает эти файлы никуда; если файлы data являются сгенерированными файлами, Bazel генерирует их. При сборке теста, зависящего от этой java_library, Bazel копирует или связывает файлы data в область runfiles.

resources

Список меток; значение по умолчанию []

Список файлов данных для включения в JAR-файл Java.

Ресурсы могут быть исходными файлами или сгенерированными файлами.

Если ресурсы указаны, они будут включены в jar вместе с обычными файлами .class, созданными в результате компиляции. Расположение ресурсов внутри JAR-файла определяется структурой проекта. Bazel сначала ищет стандартную структуру каталогов Maven (стандартную структуру каталогов), («директория src», за которой следует вложенная «директория resources»). Если её не найдено, Bazel ищет самую верхнюю директорию с именем «java» или «javatests» (например, если ресурс находится по адресу <workspace root>/x/java/y/java/z, путь к ресурсу будет y/java/z. Этот эвристический метод не может быть переопределен, однако, атрибут resource_strip_prefix может быть использован для указания альтернативной директории для файлов ресурсов).

add_exports

Список строк; значение по умолчанию []

Разрешить этой библиотеке доступ к указанным module или package.

Это соответствует флагам javac и JVM --add-exports=.

add_opens

Список строк; значение по умолчанию []

Разрешить этой библиотеке рефлексивный доступ к указанным module или package.

Это соответствует флагам javac и JVM --add-opens=.

bootclasspath

Метка; значение по умолчанию None

Ограниченный API, не использовать!
exported_plugins

Список меток; значение по умолчанию []

Список java_plugin (например, процессоры аннотаций), которые следует экспортировать в библиотеки, которые напрямую зависят от этой библиотеки.

Указанный список java_plugin будет применён к любой библиотеке, которая напрямую зависит от этой библиотеки, точно так же, как если бы эта библиотека явно объявила эти метки в plugins.

exports

Список меток; значение по умолчанию []

Экспортируемые библиотеки.

Перечисление правил здесь сделает их доступными для родительских правил, как если бы родители явно зависели от этих правил. Это не относится к обычным (не экспортируемым) deps.

Резюме: правило X может получить доступ к коду в Y, если существует путь зависимости между ними, начинающийся с ребра deps и продолжающийся нулем или более ребрами exports. Давайте рассмотрим несколько примеров для иллюстрации этого.

Предположим, что A зависит от B, а B зависит от C. В этом случае C является транзитивной зависимостью A, поэтому изменение исходных кодов C и перестроение A приведет к правильной пересборке всего. Однако A не сможет использовать классы в C. Для этого A должна объявить C в своём deps, или B может сделать это проще для A (и всего, что может зависеть от A), объявив C в своём (B's) атрибуте exports.

Замкнутое множество экспортируемых библиотек доступно всем прямым родительским правилам. Рассмотрим немного другой пример: A зависит от B, B зависит от C и D, и также экспортирует C, но не D. Теперь A имеет доступ к C, но не к D. Если C и D экспортируют некоторые библиотеки, C' и D' соответственно, A сможет получить доступ только к C', но не к D'.

Важно: экспортируемое правило не является обычной зависимостью. В предыдущем примере, если B экспортирует C и хочет также использовать C, он должен также включить его в свой собственный deps.

javabuilder_jvm_flags

Список строк; значение по умолчанию []

Ограниченный API, не использовать!
javacopts

Список строк; значение по умолчанию []

Дополнительные параметры компилятора для этой библиотеки. Подлежат подстановке "переменных make" и разбору токенов Bourne shell.

Эти параметры компилятора передаются javac после глобальных параметров компилятора.

neverlink

Булево значение; значение по умолчанию False

Нужно ли использовать эту библиотеку только для компиляции, а не во время выполнения. Полезно, если библиотека будет предоставлена средой выполнения во время выполнения. Примеры таких библиотек — API IDE для плагинов IDE или tools.jar для чего-либо, работающего на стандартной JDK.

Обратите внимание, что neverlink = True не препятствует компилятору встраивать материал из этой библиотеки в цели компиляции, которые зависят от неё, как разрешено спецификацией языка Java (например, static final константы String или примитивных типов). Поэтому предпочтительным вариантом использования является тот случай, когда библиотека времени выполнения идентична библиотеке компиляции.

Если библиотека времени выполнения отличается от библиотеки компиляции, вы должны убедиться, что она отличается только в местах, которые JLS запрещает компиляторам встраивать (и это должно сохраняться для всех будущих версий JLS).

plugins

Список меток; значение по умолчанию []

Плагины компилятора Java для запуска во время компиляции. Каждый java_plugin в этом атрибуте будет запущен при каждой сборке этого правила. Библиотека также может унаследовать плагины от зависимостей, которые используют exported_plugins. Ресурсы, сгенерированные плагином, будут включены в результирующий JAR-файл этого правила.
proguard_specs

Список меток; значение по умолчанию []

Файлы, которые будут использоваться в качестве спецификации Proguard. Они опишут набор спецификаций, которые будут использоваться Proguard. Если они указаны, они будут добавлены к любой цели android_binary с зависимостью от этой библиотеки. Включенные здесь файлы должны содержать только идемпотентные правила, а именно -dontnote, -dontwarn, assumenosideeffects и правила, начинающиеся с -keep. Другие параметры могут появиться только в android_binary proguard_specs для обеспечения отсутствия тавтологических объединений.
resource_strip_prefix

Строка; значение по умолчанию ""

Префикс пути для удаления из Java-ресурсов.

Если указан, этот префикс пути удаляется из каждого файла в атрибуте resources. Ошибка, если файл ресурса не находится в этой директории. Если не указан (по умолчанию), путь к файлу ресурса определяется в соответствии с тем же логикой, что и пакет Java исходных файлов. Например, исходный файл по адресу stuff/java/foo/bar/a.txt будет находиться по адресу foo/bar/a.txt.

runtime_deps

Список меток; значение по умолчанию []

Библиотеки, которые необходимо сделать доступными для конечного двоичного файла или теста только во время выполнения. Как и обычные deps, они появятся на пути класса во время выполнения, но в отличие от них, не на пути класса во время компиляции. Зависимости, необходимые только во время выполнения, должны быть перечислены здесь. Инструменты анализа зависимостей должны игнорировать цели, присутствующие как в runtime_deps, так и в deps.

java_test

java_test(name, deps, srcs, data, resources, add_exports, add_opens, args, bootclasspath, classpath_resources, compatible_with, create_executable, deploy_manifest_lines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, launcher, licenses, local, main_class, neverlink, plugins, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, use_testrunner, visibility)

Правило java_test() компилирует Java-тест. Тест — это бинарная оболочка вокруг вашего тестового кода. Вместо компиляции основного класса вызывается метод main исполнителя тестов.

Неявные целевые выходы

  • name.jar: Java-архив.
  • name_deploy.jar: Java-архив, пригодный для развертывания. (Создаётся только при явном запросе.) См. описание вывода name_deploy.jar из java_binary для получения более подробной информации.

См. раздел по аргументам java_binary(). Это правило также поддерживает все общие атрибуты всех правил тестов (*_test).

Примеры



java_library(
    name = "tests",
    srcs = glob(["*.java"]),
    deps = [
        "//java/com/foo/base:testResources",
        "//java/com/foo/testing/util",
    ],
)

java_test(
    name = "AllTests",
    size = "small",
    runtime_deps = [
        ":tests",
        "//util/mysql",
    ],
)

Аргументы

Атрибуты
name

Имя; обязательно

Уникальное имя для этой цели.

deps

Список метки; по умолчанию []

Список других библиотек, которые нужно связать с целью. См. общие замечания о deps в Типичные атрибуты, определяемые большинством правил построения.
srcs

Список метки; по умолчанию []

Список исходных файлов, которые обрабатываются для создания цели. Этот атрибут почти всегда необходим; см. исключения ниже.

Исходные файлы типа .java компилируются. В случае сгенерированных .java файлов рекомендуется указывать имя правила генерации, а не имя самого файла. Это не только улучшает читаемость, но и делает правило более устойчивым к будущим изменениям: если правило генерации в будущем сгенерирует другие файлы, вам нужно будет исправить только одно место: outs правила генерации. Вы не должны перечислять правило генерации в deps, потому что это бесполезно.

Исходные файлы типа .srcjar распаковываются и компилируются. (Это полезно, если вам нужно сгенерировать набор .java файлов с помощью genrule.)

Правила: если правило (обычно genrule или filegroup) генерирует любой из перечисленных выше файлов, они будут использоваться так же, как описано для исходных файлов.

Этот аргумент почти всегда необходим, за исключением случаев, когда атрибут main_class указывает класс в runtime classpath или вы указываете аргумент runtime_deps.

data

Список метки; по умолчанию []

Список файлов, необходимых этой библиотеке во время выполнения. См. общие замечания о data в Типичные атрибуты, определяемые большинством правил построения.
resources

Список метки; по умолчанию []

Список файлов данных для включения в Java jar.

Ресурсы могут быть исходными файлами или сгенерированными файлами.

Если ресурсы указаны, они будут включены в jar вместе с обычными .class файлами, созданными при компиляции. Положение ресурсов внутри jar определяется структурой проекта. Bazel сначала ищет стандартную структуру каталогов Maven'a (стандартная структура каталогов), (каталог "src", за которым следует вложенный каталог "resources"). Если он не найден, Bazel затем ищет верхний каталог с именем "java" или "javatests" (например, если ресурс находится в <workspace root>/x/java/y/java/z, путь к ресурсу будет y/java/z. Этот эвристический метод не может быть переопределен, однако, можно использовать атрибут resource_strip_prefix для указания альтернативного каталога для файлов ресурсов.)

add_exports

Список строк; по умолчанию []

Разрешить этой библиотеке доступ к заданным module или package.

Это соответствует флагам javac и JVM --add-exports=.

add_opens

Список строк; по умолчанию []

Разрешить этой библиотеке рефлексивный доступ к заданным module или package.

Это соответствует флагам javac и JVM --add-opens=.

bootclasspath

Метка; по умолчанию None

Ограниченный API, не использовать!
classpath_resources

Список метки; по умолчанию []

НЕ ИСПОЛЬЗОВАТЬ ЭТОТ ВАРИАНТ, ЕСЛИ НЕТ ДРУГИХ СПОСОБОВ)

Список ресурсов, которые должны находиться в корне дерева java. Единственная цель этого атрибута — поддержка сторонних библиотек, требующих, чтобы их ресурсы находились в classpath ровно как "myconfig.xml". Разрешено только для бинарных файлов, а не для библиотек, из-за потенциальных конфликтов имён.

create_executable

Булево; по умолчанию True

Устаревшее, используйте java_single_jar вместо него.
deploy_manifest_lines

Список строк; по умолчанию []

Список строк для добавления в файл META-INF/manifest.mf, сгенерированный для цели *_deploy.jar. Содержимое этого атрибута не подвергается подстановке "Переменных Make".
javacopts

Список строк; по умолчанию []

Дополнительные параметры компилятора для этого двоичного файла. Подвержены подстановке "Переменных Make" и токенизации Bourne shell.

Эти параметры компилятора передаются в javac после глобальных параметров компилятора.

jvm_flags

Список строк; по умолчанию []

Список флагов для встраивания в скрипт оболочки, сгенерированный для запуска этого двоичного файла. Подвержены подстановке $(location) и "Переменных Make", а также токенизации Bourne shell.

Скрипт оболочки для Java-бинарного файла включает определение CLASSPATH (для поиска всех зависимых jar-файлов) и вызывает соответствующий интерпретатор Java. Команда, сгенерированная скриптом оболочки, включает имя главного класса, за которым следует "$@", чтобы вы могли передать дополнительные аргументы после имени класса. Однако, аргументы, предназначенные для парсинга JVM, должны указываться перед именем класса в командной строке. Содержимое jvm_flags добавляется к скрипту оболочки перед указанием имени класса.

Обратите внимание, что этот атрибут не влияет на результаты *_deploy.jar.

launcher

Метка; по умолчанию None

Укажите двоичный файл, который будет использоваться для запуска вашей Java-программы вместо обычной bin/java программы, включенной в JDK. Цель должна быть cc_binary. Любой cc_binary, реализующий Java Invocation API, может быть указан в качестве значения этого атрибута.

По умолчанию Bazel будет использовать обычный загрузчик JDK (bin/java или java.exe).

Связанный флаг Bazel --java_launcher влияет только на те java_binary и java_test цели, которые не указали атрибут launcher.

Обратите внимание, что ваши родные (C++, SWIG, JNI) зависимости будут построены по-разному в зависимости от того, используете ли вы загрузчик JDK или другой загрузчик:

  • Если вы используете обычный загрузчик JDK (по умолчанию), родные зависимости строятся как общая библиотека с именем {name}_nativedeps.so, где {name} — атрибут name правила java_binary. Неиспользуемый код не удаляется компоновщиком в этой конфигурации.
  • Если вы используете любой другой загрузчик, родные (C++) зависимости статически подключаются к бинарному файлу с именем {name}_nativedeps, где {name} — атрибут name правила java_binary. В этом случае компоновщик удалит любой код, который, по его мнению, не используется, из результирующего двоичного файла, что означает, что любой C++ код, доступный только через JNI, может не быть подключен, если эта cc_library цель не указывает alwayslink = True.

При использовании загрузчика, отличного от стандартного загрузчика JDK, формат результата *_deploy.jar меняется. Для получения подробностей см. основную документацию java_binary.

main_class

Строка; по умолчанию ""

Имя класса с методом main() для использования в качестве точки входа. Если правило использует этот параметр, оно не нуждается в списке srcs=[...]. Таким образом, с помощью этого атрибута можно создать исполняемый файл из Java-библиотеки, которая уже содержит один или несколько методов main().

Значение этого атрибута — имя класса, а не имя исходного файла. Класс должен быть доступен во время выполнения: он может быть скомпилирован этим правилом (из srcs) или предоставлен прямыми или транзитивными зависимостями (через runtime_deps или deps). Если класс недоступен, двоичный файл потерпит неудачу во время выполнения; проверки во время сборки нет.

neverlink

Булево; по умолчанию False

plugins

Список метки; по умолчанию []

Плагины Java-компилятора для запуска во время компиляции. Каждый java_plugin в этом атрибуте будет запущен каждый раз, когда будет построено это правило. Библиотека также может унаследовать плагины от зависимостей, использующих exported_plugins. Ресурсы, сгенерированные плагином, будут включены в результирующий jar этого правила.
resource_strip_prefix

Строка; по умолчанию ""

Префикс пути для удаления из Java-ресурсов.

Если указан, этот префикс пути удаляется из каждого файла в атрибуте resources. Ошибка, если файл ресурса не находится в этом каталоге. Если не указано (по умолчанию), путь к файлу ресурса определяется по той же логике, что и Java-пакет исходных файлов. Например, исходный файл в stuff/java/foo/bar/a.txt будет расположен в foo/bar/a.txt.

runtime_deps

Список метки; по умолчанию []

Библиотеки, которые нужно сделать доступными для конечного двоичного файла или теста во время выполнения только. Как и обычные deps, они будут отображаться в runtime classpath, но, в отличие от них, не в compile-time classpath. Зависимости, необходимые только во время выполнения, должны быть перечислены здесь. Инструменты анализа зависимостей должны игнорировать цели, которые появляются как в runtime_deps, так и в deps.
stamp

Целое число; по умолчанию 0

Нужно ли кодировать информацию о сборке в двоичный файл. Возможные значения:
  • stamp = 1: Всегда вставлять информацию о сборке в двоичный файл, даже в --nostamp сборках. От этого параметра следует избегать, так как он потенциально убивает кэширование удалённых двоичных файлов и любых последующих действий, которые зависят от него.
  • stamp = 0: Всегда заменять информацию о сборке на постоянные значения. Это обеспечивает хорошее кэширование результатов сборки.
  • stamp = -1: Вставка информации о сборке управляется флагом --[no]stamp.

Отмеченные двоичные файлы не перестраиваются, если не изменены их зависимости.

test_class

Строка; по умолчанию ""

Класс Java, который должен загрузить запуск тестов.

По умолчанию, если этот аргумент не определён, используется legacy режим, и вместо него используются аргументы теста. Установите флаг --nolegacy_bazel_java_test для отказа от использования первого аргумента.

Этот атрибут указывает имя класса Java, который должен быть запущен этим тестом. Редко необходимо устанавливать его. Если этот аргумент опущен, он будет определён с помощью name целевого объекта и его пути относительно корня исходного кода. Если тест расположен вне известного корня исходного кода, Bazel сообщит об ошибке, если test_class не задано.

Для JUnit3, класс теста должен быть подклассом junit.framework.TestCase или должен иметь публичный статический метод suite(), который возвращает junit.framework.Test (или подкласс Test). Для JUnit4 класс должен быть аннотирован с org.junit.runner.RunWith.

Этот атрибут позволяет нескольким правилам java_test использовать тот же Test (TestCase, TestSuite, ...). Обычно дополнительная информация передаётся ему (например, через jvm_flags=['-Dkey=value']), чтобы его поведение отличалось в каждом случае, например, для запуска подмножества тестов. Этот атрибут также позволяет использовать тесты Java вне дерева javatests.

use_launcher

Булево; по умолчанию True

Нужно ли использовать пользовательский запуск.

Если этот атрибут установлен в false, атрибут launcher и связанный --java_launcher флаг будут проигнорированы для этой цели.

use_testrunner

Булево; по умолчанию True

Использовать запуск тестов (по умолчанию com.google.testing.junit.runner.BazelTestRunner) как главную точку входа для Java-программы и предоставить класс теста запуск тестов в виде значения системной переменной bazel.test_suite.
Вы можете использовать это, чтобы переопределить стандартное поведение, которое заключается в использовании запуска тестов для java_test правил, и не использовать его для java_binary правил. Вероятно, вам этого не захочется. Одно использование - для AllTest правил, которые вызываются другим правилом (например, для настройки базы данных перед запуском тестов). Правило AllTest должно быть объявлено как java_binary, но всё равно должно использовать запуск тестов в качестве основной точки входа. Имя класса запуска тестов может быть переопределено атрибутом main_class.

java_package_configuration

java_package_configuration(name, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, javacopts, output_licenses, packages, restricted_to, system, tags, target_compatible_with, testonly, toolchains, visibility)

Настройка, которую нужно применить к набору пакетов. Настройки могут быть добавлены к java_toolchain.javacopts.

Пример:



java_package_configuration(
    name = "my_configuration",
    packages = [":my_packages"],
    javacopts = ["-Werror"],
)

package_group(
    name = "my_packages",
    packages = [
        "//com/my/project/...",
        "-//com/my/project/testing/...",
    ],
)

java_toolchain(
    ...,
    package_configuration = [
        ":my_configuration",
    ]
)


Аргументы

Атрибуты
name

Имя; обязательно

Уникальное имя для этой цели.

data

Список метки; по умолчанию []

Список файлов, необходимых для этой настройки во время выполнения.
javacopts

Список строк; по умолчанию []

Флаги компилятора Java.
output_licenses

Список строк; по умолчанию []

packages

Список меток; по умолчанию []

Набор package_group для которых должна применяться настройка.
system

Метка; по умолчанию None

Соответствует флагу javac --system.

java_plugin

java_plugin(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, generates_api, javabuilder_jvm_flags, javacopts, licenses, neverlink, output_licenses, plugins, processor_class, proguard_specs, resource_strip_prefix, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_plugin определяет плагины для компилятора Java, запускаемого Bazel. Единственный поддерживаемый тип плагинов — обработчики аннотаций. Правило java_library или java_binary может запускать плагины, завися от них через атрибут plugins. Правило java_library также может автоматически экспортировать плагины в библиотеки, которые напрямую зависят от него, используя exported_plugins.

Неявные целевые выходы

  • libname.jar: Java архив.

Аргументы идентичны java_library, за исключением добавления аргумента processor_class.

Аргументы

Атрибуты
name

Имя; обязательно

Уникальное имя для этого целевого объекта.

deps

Список метков; значение по умолчанию []

Список библиотек для подключения к этой библиотеке. См. общие замечания о deps в разделе Типичные атрибуты, определенные большинством правил сборки.

JAR-файлы, созданные правилами java_library в списке deps, будут находиться в пути класса во время компиляции этого правила. Кроме того, транзитивное замыкание их deps, runtime_deps и exports будет находиться в пути класса во время выполнения.

В отличие от этого, целевые объекты в атрибуте data включаются в runfiles, но не включаются ни в путь класса во время компиляции, ни в путь класса во время выполнения.

srcs

Список метков; значение по умолчанию []

Список исходных файлов, которые обрабатываются для создания целевого объекта. Этот атрибут почти всегда обязателен; см. исключения ниже.

Файлы исходного кода типа .java компилируются. В случае сгенерированных файлов .java рекомендуется указать здесь имя правила генерации, а не имя файла. Это не только улучшает читаемость, но и делает правило более устойчивым к будущим изменениям: если правило генерации будет генерировать разные файлы в будущем, вам нужно исправить только одно место: outs правила генерации. Не следует перечислять правило генерации в deps, так как это бесполезно.

Исходные файлы типа .srcjar распаковываются и компилируются. (Это полезно, если вам нужно сгенерировать набор файлов .java с помощью genrule.)

Правила: если правило (обычно genrule или filegroup) генерирует любой из перечисленных выше файлов, они будут использоваться так же, как описано для исходных файлов.

Исходные файлы типа .properties обрабатываются как ресурсы.

Все остальные файлы игнорируются, пока существует хотя бы один файл описанного выше типа. В противном случае возникает ошибка.

Этот аргумент почти всегда обязателен, за исключением случаев, когда вы указываете аргумент runtime_deps.

data

Список метков; значение по умолчанию []

Список файлов, необходимых этой библиотеке во время выполнения. См. общие замечания о data в разделе Типичные атрибуты, определенные большинством правил сборки.

При построении java_library, Bazel не помещает эти файлы никуда; если файлы data являются сгенерированными, Bazel генерирует их. При построении теста, зависящего от этой java_library, Bazel копирует или связывает файлы data в область runfiles.

resources

Список метков; значение по умолчанию []

Список файлов данных для включения в Java jar.

Ресурсы могут быть исходными или сгенерированными файлами.

Если ресурсы указаны, они будут включены в jar вместе с обычными файлами .class , созданными при компиляции. Расположение ресурсов внутри jar-файла определяется структурой проекта. Bazel сначала ищет стандартную структуру каталогов Maven стандартная структура каталогов (каталог "src", за которым следует вложенный каталог "resources"). Если он не найден, Bazel ищет верхний каталог с именем "java" или "javatests" (например, если ресурс находится в <workspace root>/x/java/y/java/z, путь к ресурсу будет y/java/z. Этот эвристический способ не может быть изменен, но атрибут resource_strip_prefix может быть использован для указания альтернативной директории для файлов ресурсов).

add_exports

Список строк; значение по умолчанию []

Разрешить этой библиотеке доступ к заданным module или package.

Это соответствует флагам javac и JVM --add-exports=.

add_opens

Список строк; значение по умолчанию []

Разрешить этой библиотеке рефлексивный доступ к заданным module или package.

Это соответствует флагам javac и JVM --add-opens=.

bootclasspath

Метка; значение по умолчанию None

Ограниченный API, не использовать!
generates_api

Булево; значение по умолчанию False

Этот атрибут отмечает процессоры аннотаций, которые генерируют код API.

Если правило использует процессор аннотаций, генерирующий API, другие правила, зависящие от него, могут ссылаться на сгенерированный код только в том случае, если их действия компиляции запланированы после правила генерации. Этот атрибут инструктирует Bazel ввести ограничения планирования при включенном --java_header_compilation.

ПРЕДУПРЕЖДЕНИЕ: Этот атрибут влияет на производительность сборки, используйте его только в случае необходимости.

javabuilder_jvm_flags

Список строк; значение по умолчанию []

Ограниченный API, не использовать!
javacopts

Список строк; значение по умолчанию []

Дополнительные параметры компилятора для этой библиотеки. Подлежат замене "переменной Make" и разбору Bourne Shell.

Эти параметры компилятора передаются javac после глобальных параметров компилятора.

neverlink

Булево; значение по умолчанию False

Указывает, должна ли эта библиотека использоваться только для компиляции, а не во время выполнения. Полезно, если библиотека будет предоставлена средой выполнения во время выполнения. Примерами таких библиотек являются API IDE для плагинов IDE или tools.jar для всего, что выполняется в стандартной JDK.

Обратите внимание, что neverlink = True не препятствует компилятору встраивать материал из этой библиотеки в целевые объекты компиляции, зависящие от нее, как разрешено спецификацией языка Java (например, константы static final типа String или примитивных типов). Поэтому предпочтительным случаем использования является тот случай, когда библиотека во время выполнения идентична библиотеке компиляции.

Если библиотека во время выполнения отличается от библиотеки компиляции, необходимо убедиться, что она отличается только в местах, которые JLS запрещает компиляторам встраивать (и это должно сохраняться для всех будущих версий JLS).

output_licenses

Список строк; значение по умолчанию []

plugins

Список метков; значение по умолчанию []

Плагины Java-компилятора для выполнения во время компиляции. Каждый java_plugin в этом атрибуте будет выполняться при каждой сборке этого правила. Библиотека также может унаследовать плагины от зависимостей, использующих exported_plugins. Ресурсы, сгенерированные плагином, будут включены в результирующий jar-файл этого правила.
processor_class

Строка; значение по умолчанию ""

Класс процессора — это полное имя типа класса, который Java-компилятор должен использовать в качестве точки входа в процессор аннотаций. Если не указано, это правило не будет вносить процессор аннотаций в обработку аннотаций Java-компилятора, но путь его класса во время выполнения по-прежнему будет включен в путь процессора аннотаций компилятора. (Это в первую очередь предназначено для использования плагинами Error Prone, которые загружаются из пути процессора аннотаций с помощью java.util.ServiceLoader.)
proguard_specs

Список метков; значение по умолчанию []

Файлы, которые будут использоваться в качестве спецификаций Proguard. Они будут описывать набор спецификаций, которые будут использоваться Proguard. Если они указаны, они будут добавлены к любому целевому объекту android_binary , зависящему от этой библиотеки. Включенные здесь файлы должны содержать только идемпотентные правила, а именно -dontnote, -dontwarn, assumenosideeffects и правила, начинающиеся с -keep. Другие параметры могут появляться только в proguard_specs android_binary, чтобы гарантировать нетавтологичные слияния.
resource_strip_prefix

Строка; значение по умолчанию ""

Префикс пути для удаления из Java-ресурсов.

Если указан, этот префикс пути удаляется из каждого файла в атрибуте resources. Ошибка возникает, если файл ресурса не находится в этой директории. Если не указано (по умолчанию), путь к файлу ресурса определяется по той же логике, что и пакет Java исходных файлов. Например, исходный файл в stuff/java/foo/bar/a.txt будет находиться по адресу foo/bar/a.txt.

java_runtime

java_runtime(name, srcs, compatible_with, default_cds, deprecation, distribs, exec_compatible_with, exec_properties, features, hermetic_srcs, hermetic_static_libs, java, java_home, lib_ct_sym, lib_modules, output_licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, version, visibility)

Указывает конфигурацию для Java-среды выполнения.

Пример:



java_runtime(
    name = "jdk-9-ea+153",
    srcs = glob(["jdk9-ea+153/**"]),
    java_home = "jdk9-ea+153",
)


Аргументы

Атрибуты
name

Имя; обязательно

Уникальное имя для этого целевого объекта.

srcs

Список меток; по умолчанию []

Все файлы в среде выполнения.
default_cds

Метка; по умолчанию None

Архив CDS по умолчанию для герметичной java_runtime. Когда герметичность включена для java_binary целевого объекта, java_runtime архив CDS по умолчанию упаковывается в JAR-архив для герметичного развертывания.
hermetic_srcs

Список меток; по умолчанию []

Файлы в среде выполнения, необходимые для герметичных развертываний.
hermetic_static_libs

Список меток; по умолчанию []

Библиотеки, статически связанные с загрузчиком для герметичных развертываний.
java

Метка; по умолчанию None

Путь к исполняемому файлу Java.
java_home

Строка; по умолчанию ""

Путь к корню среды выполнения. Подлежит замене с помощью переменных "Make". Если этот путь абсолютный, правило обозначает негерметичную среду выполнения Java с известным путем. В этом случае атрибуты srcs и java должны быть пустыми.
lib_ct_sym

Метка; по умолчанию None

Файл lib/ct.sym, необходимый для компиляции с --release. Если не указано и существует ровно один файл в srcs, путь которого заканчивается на /lib/ct.sym, этот файл используется.
lib_modules

Метка; по умолчанию None

Файл lib/modules, необходимый для герметичных развертываний.
output_licenses

Список строк; по умолчанию []

version

Целое число; по умолчанию 0

Версия функции среды выполнения Java. То есть целое число, возвращаемое Runtime.version().feature().

java_toolchain

java_toolchain(name, android_lint_data, android_lint_jvm_opts, android_lint_opts, android_lint_package_configuration, android_lint_runner, bootclasspath, compatible_javacopts, compatible_with, deprecation, deps_checker, distribs, exec_compatible_with, exec_properties, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_builtin_processors, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_worker_cancellation, javac_supports_worker_multiplex_sandboxing, javac_supports_workers, javacopts, jspecify_implicit_deps, jspecify_javacopts, jspecify_packages, jspecify_processor, jspecify_processor_class, jspecify_stubs, jvm_opts, licenses, misc, oneversion, oneversion_allowlist, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, proguard_allowlister, reduced_classpath_incompatible_processors, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, toolchains, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

Указывает конфигурацию для компилятора Java. Инструментарий, который использовать, можно изменить с помощью аргумента --java_toolchain. Обычно вам не следует писать такие правила, если вы не хотите настроить свой компилятор Java.

Примеры

Простой пример:



java_toolchain(
    name = "toolchain",
    source_version = "7",
    target_version = "7",
    bootclasspath = ["//tools/jdk:bootclasspath"],
    xlint = [ "classfile", "divzero", "empty", "options", "path" ],
    javacopts = [ "-g" ],
    javabuilder = ":JavaBuilder_deploy.jar",
)

Аргументы

Атрибуты
END_OF_DOCUMENT_MARKER
name

Имя; обязательно

Уникальное имя для этой цели.

android_lint_data

Список метки; значение по умолчанию []

Метки доступных инструментов для расширения метки в android_lint_jvm_opts.
android_lint_jvm_opts

Список строк; значение по умолчанию []

Список аргументов для JVM при вызове Android Lint.
android_lint_opts

Список строк; значение по умолчанию []

Список аргументов Android Lint.
android_lint_package_configuration

Список меток; значение по умолчанию []

Настройка Android Lint, которая должна быть применена к указанным группам пакетов.
android_lint_runner

Метка; значение по умолчанию None

Метка исполнителя Android Lint, если таковой имеется.
bootclasspath

Список меток; значение по умолчанию []

Элементы загрузки bootclasspath Java-целей. Соответствует флагу javac -bootclasspath.
compatible_javacopts

null; значение по умолчанию {}

Внутренний API, не использовать!
deps_checker

Метка; значение по умолчанию None

Метка JAR-пакета ImportDepsChecker.
forcibly_disable_header_compilation

Булево значение; значение по умолчанию False

Переопределяет --java_header_compilation, чтобы отключить компиляцию заголовков на платформах, которые ее не поддерживают, например, JDK 7 Bazel.
genclass

Метка; значение по умолчанию None

Метка JAR-пакета GenClass.
header_compiler

Метка; значение по умолчанию None

Метка компилятора заголовков. Необходимо, если включено --java_header_compilation.
header_compiler_builtin_processors

Список строк; значение по умолчанию []

Внутренний API, не использовать!
header_compiler_direct

Метка; значение по умолчанию None

Необязательная метка компилятора заголовков для использования в прямых действиях с классовой путями, которые не включают обработчики аннотаций API-генерации.

Этот инструмент не поддерживает обработку аннотаций.

ijar

Метка; значение по умолчанию None

Метка исполняемого файла ijar.
jacocorunner

Метка; значение по умолчанию None

Метка JAR-пакета JacocoCoverageRunner.
java_runtime

Метка; значение по умолчанию None

java_runtime, используемый с этой цепочкой инструментов. По умолчанию — java_runtime в конфигурации выполнения.
javabuilder

Метка; значение по умолчанию None

Метка JAR-пакета JavaBuilder.
javabuilder_data

Список меток; значение по умолчанию []

Метки доступных данных для расширения метки в javabuilder_jvm_opts.
javabuilder_jvm_opts

Список строк; значение по умолчанию []

Список аргументов для JVM при вызове JavaBuilder.
javac_supports_multiplex_workers

Булево значение; значение по умолчанию True

True, если JavaBuilder поддерживает запуск в качестве многоканального постоянного работника, false — если нет.
javac_supports_worker_cancellation

Булево значение; значение по умолчанию True

True, если JavaBuilder поддерживает отмену постоянных работников, false — если нет.
javac_supports_worker_multiplex_sandboxing

Булево значение; значение по умолчанию False

True, если JavaBuilder поддерживает запуск в качестве многоканального постоянного работника с песочницей, false — если нет.
javac_supports_workers

Булево значение; значение по умолчанию True

True, если JavaBuilder поддерживает запуск в качестве постоянного работника, false — если нет.
javacopts

Список строк; значение по умолчанию []

Список дополнительных аргументов для компилятора Java. Обратитесь к документации компилятора Java за подробным списком возможных флагов компилятора Java.
jspecify_implicit_deps

Метка; значение по умолчанию None

Экспериментальное, не использовать!
jspecify_javacopts

Список строк; значение по умолчанию []

Экспериментальное, не использовать!
jspecify_packages

Список меток; значение по умолчанию []

Экспериментальное, не использовать!
jspecify_processor

Метка; значение по умолчанию None

Экспериментальное, не использовать!
jspecify_processor_class

Строка; значение по умолчанию ""

Экспериментальное, не использовать!
jspecify_stubs

Список меток; значение по умолчанию []

Экспериментальное, не использовать!
jvm_opts

Список строк; значение по умолчанию []

Список аргументов для JVM при вызове компилятора Java. Обратитесь к документации виртуальной машины Java за полным списком возможных флагов для этого параметра.
misc

Список строк; значение по умолчанию []

Устарело: используйте javacopts вместо этого.
oneversion

Метка; значение по умолчанию None

Метка двоичного файла для принудительного применения одной версии.
oneversion_allowlist

Метка; значение по умолчанию None

Метка списка разрешенных версий для одной версии.
oneversion_allowlist_for_tests

Метка; значение по умолчанию None

Метка списка разрешенных версий для одной версии для тестов.
oneversion_whitelist

Метка; значение по умолчанию None

Устарело: используйте oneversion_allowlist вместо этого.
package_configuration

Список меток; значение по умолчанию []

Конфигурация, которая должна быть применена к указанным группам пакетов.
proguard_allowlister

Метка; значение по умолчанию "@bazel_tools//tools/jdk:proguard_whitelister"

Метка Proguard allowlister.
reduced_classpath_incompatible_processors

Список строк; значение по умолчанию []

Внутренний API, не использовать!
singlejar

Метка; значение по умолчанию None

Метка JAR-пакета SingleJar.
source_version

Строка; значение по умолчанию ""

Версия Java-исходников (например, '6' или '7'). Указывает, какие структуры кода разрешены в исходном коде Java.
target_version

Строка; значение по умолчанию ""

Версия Java-цели (например, '6' или '7'). Указывает, для какой Java-среды выполнения должен быть построен класс.
timezone_data

Метка; значение по умолчанию None

Метка JAR-ресурса, содержащего данные часовых поясов. При установке данные часовых поясов добавляются как неявные зависимости среды выполнения всех правил java_binary.
tools

Список меток; значение по умолчанию []

Метки доступных инструментов для расширения метки в jvm_opts.
turbine_data

Список меток; значение по умолчанию []

Метки доступных данных для расширения метки в turbine_jvm_opts.
turbine_jvm_opts

Список строк; значение по умолчанию []

Список аргументов для JVM при вызове turbine.
xlint

Список строк; значение по умолчанию — []

Список предупреждений для добавления или удаления из списка по умолчанию. Перед предупреждением следует поставить дефис, чтобы удалить его. Дополнительную информацию см. в документации Javac по параметрам -Xlint.

За исключением случаев, когда указано иное, содержимое этой страницы лицензировано в соответствии с лицензией Creative Commons Attribution 4.0, а примеры кода лицензированы в соответствии с лицензией Apache 2.0. Подробности см. в политике Google для разработчиков. Java — зарегистрированный товарный знак Oracle и/или её аффилированных лиц.

Последнее обновление 2024-12-10 UTC.

Licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License.
https://bazel.build/versions/8.0.0/reference/be/java

Spec-Zone.ru

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