Spec-Zone.ru › Bazel 6.1

Общие определения

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

Содержание

  • Токенизация оболочки Bourne
  • Расширение меток
  • Типичные атрибуты, определённые большинством правил построения
  • Атрибуты, общие для всех правил построения
  • Атрибуты, общие для всех правил тестирования (*_test)
  • Атрибуты, общие для всех правил бинарных файлов (*_binary)
  • Настраиваемые атрибуты
  • Неявные целевые файлы вывода

Токенизация оболочки Bourne

Определённые строковые атрибуты некоторых правил разбиваются на несколько слов в соответствии с правилами токенизации оболочки Bourne: необрамлённые пробелы разделяют отдельные слова, а символы одиночных и двойных кавычек, а также обратные слэши используются для предотвращения токенизации.

Атрибуты, которые подвергаются этой токенизации, явно указываются в их определениях в этом документе.

Атрибуты, подверженные расширению переменных «Make» и токенизации оболочки Bourne, обычно используются для передачи произвольных опций компиляторам и другим инструментам. Примеры таких атрибутов — cc_library.copts и java_library.javacopts. Вместе эти подстановки позволяют одной строковой переменной расширяться в список опций, специфичных для конфигурации.

Расширение меток

Некоторые строковые атрибуты очень немногих правил подвергаются расширению меток: если эти строки содержат действительную метку, как подстроку, например //mypkg:target, и эта метка является объявленной предпосылкой текущего правила, она расширяется в путь к файлу, представленному целью //mypkg:target.

Примеры атрибутов включают genrule.cmd и cc_binary.linkopts. Детали могут существенно различаться в каждом случае, например, расширяются ли относительные метки; как обрабатываются метки, расширяющиеся до нескольких файлов и т. д. Для получения подробной информации см. документацию по атрибутам правил.

Типичные атрибуты, определённые большинством правил построения

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

Атрибут Описание
data

List of labels ; optional

Файлы, необходимые для этого правила во время выполнения. Может перечислять файлы или целевые правила. Обычно допускает любые целевые объекты.

Файлы вывода и файлы выполнения целевых объектов в атрибуте data должны появляться в области *.runfiles любого исполняемого файла, который является результатом этого целевого объекта или имеет зависимость от времени выполнения от этого целевого объекта. Это могут быть файлы данных или двоичные файлы, используемые при выполнении srcs этого целевого объекта. Дополнительную информацию о том, как зависеть от файлов данных и использовать их, можно найти в разделе зависимостей данных.

Новые правила должны определить атрибут data, если они обрабатывают входные данные, которые могут использовать другие входные данные во время выполнения. Функции реализации правил также должны заполнить файлы выполнения целевого объекта из выходов и файлов выполнения любого атрибута data, а также файлов выполнения из любого атрибута зависимости, который предоставляет исходный код или зависимости во время выполнения.

deps

List of labels ; optional

Зависимости для этой цели. Обычно следует перечислять только целевые правила. (Хотя некоторые правила допускают перечисление файлов непосредственно в deps, этого следует избегать, когда это возможно.)

Правила, специфичные для языка, обычно ограничивают перечисленные цели теми, которые имеют определённые провайдеры.

Точное значение того, что означает зависимость цели от другой цели с использованием deps, специфично для типа правила, и документация по правилу более подробно рассматривает этот вопрос. Для правил, которые обрабатывают исходный код, deps обычно указывает зависимости кода, используемые кодом в srcs.

Чаще всего зависимость deps используется для того, чтобы один модуль мог использовать символы, определённые в другом модуле, написанном на том же языке программирования и отдельно скомпилированном. В многих случаях также разрешены зависимости между языками: например, целевой объект java_library может зависеть от кода C++ в целевом объекте cc_library, указав последний в атрибуте deps. Дополнительную информацию о зависимостях можно найти в соответствующем определении.

licenses

List of strings; optional; nonconfigurable

Список строк типа лицензий, которые должны использоваться для этой конкретной цели. Это часть устаревшего API лицензирования, которое Bazel больше не использует. Не используйте это.

srcs

List of labels ; optional

Файлы, обработанные или включённые этим правилом. Обычно перечисляются напрямую, но могут перечислять целевые правила (например, filegroup или genrule), чтобы включить их файлы вывода по умолчанию.

Правила, специфичные для языка, часто требуют, чтобы перечисленные файлы имели определённые расширения.

Атрибуты, общие для всех правил построения

В этом разделе описываются атрибуты, которые неявно добавляются ко всем правилам построения.

Атрибут Описание
compatible_with

List of labels ; optional; nonconfigurable

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

Это часть системы ограничений Bazel, которая позволяет пользователям объявлять, какие целевые объекты могут и не могут зависеть друг от друга. Например, внешние исполняемые файлы не должны зависеть от библиотек с конфиденциальными данными компании. Подробности см. в ConstraintSemantics.

deprecation

String; optional; nonconfigurable

Объяснительное предупреждение, связанное с этим целевым объектом. Обычно это используется для уведомления пользователей о том, что целевой объект устарел или был заменён другой правилом, является закрытым для пакета или, возможно, считается вредным по какой-либо причине. Хорошо включить ссылку (например, веб-страницу, номер ошибки или примеры исправлений), чтобы легко найти необходимые изменения для предотвращения сообщения. Если есть новый целевой объект, который можно использовать как прямую замену, целесообразно просто переместить всех пользователей старого целевого объекта на новый.

Этот атрибут не влияет на способ построения, но может повлиять на вывод диагностики инструмента сборки. Инструмент сборки выдает предупреждение, когда правило с атрибутом deprecation используется целевым объектом в другом пакете.

Внутрипакетные зависимости исключены из этого предупреждения, так что, например, при построении тестов устаревшего правила не возникает предупреждение.

Если устаревший целевой объект зависит от другого устаревшего целевого объекта, сообщение о предупреждении не выводится.

После того, как люди перестанут его использовать, целевой объект можно удалить.

distribs

List of strings; optional; nonconfigurable

Список строк методов распространения, используемых для данного целевого объекта. Это часть устаревшего API лицензирования, которым Bazel больше не пользуется. Не используйте это.

exec_compatible_with

List of labels ; optional; nonconfigurable

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

exec_properties

Dictionary of strings; optional

Словарь строк, которые будут добавлены к exec_properties платформы, выбранной для данного целевого объекта. См. exec_properties правила platform.

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

features

List of feature strings; optional

Функция — это строковая метка, которая может быть включена или отключена для целевого объекта. Значение функции зависит от самого правила.

Этот атрибут features комбинируется с атрибутом уровня пакета package features. Например, если функции ["a", "b"] включены на уровне пакета, а атрибут features целевого объекта содержит ["-a", "c"], функции, включенные для правила, будут "b" и "c". См. пример.

restricted_to

List of labels ; optional; nonconfigurable

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

Это часть системы ограничений Bazel. См. compatible_with для подробностей.

tags

List of strings; optional; nonconfigurable

Метки могут использоваться для любого правила. Метки на правилах тестов и test_suite правил полезны для категоризации тестов. Метки на целевых объектах, не являющихся тестами, используются для управления изолированным выполнением genrule и действий Starlark, а также для анализа человеком и/или внешними инструментами.

Bazel изменяет поведение своего кода изоляции, если находит следующие ключевые слова в атрибуте tags любого тестового или genrule целевого объекта, или ключах execution_requirements для любого действия Starlark.

  • no-sandbox ключевое слово приводит к тому, что действие или тест никогда не будут изолированы; он всё ещё может быть кэширован или выполнен удалённо — используйте no-cache или no-remote для предотвращения любого или обоих.
  • no-cache ключевое слово приводит к тому, что действие или тест никогда не будут кэшированы (удаленно или локально)
  • no-remote-cache ключевое слово приводит к тому, что действие или тест никогда не будут кэшированы удаленно (но могут быть кэшированы локально; они также могут быть выполнены удаленно). Примечание: для целей этой метки кэш на диске считается локальным кэшем, а кэши HTTP и gRPC — удалёнными. Если указан комбинированный кэш (т. е. кэш с локальными и удалёнными компонентами), он обрабатывается как удалённый кэш и полностью отключается, если не указано --incompatible_remote_results_ignore_disk, в этом случае будут использованы локальные компоненты.
  • no-remote-exec ключевое слово приводит к тому, что действие или тест никогда не будут выполнены удаленно (но могут быть кэшированы удаленно).
  • no-remote ключевое слово предотвращает выполнение действия или теста удаленно или кэширование удаленно. Это эквивалентно использованию no-remote-cache и no-remote-exec .
  • no-remote-cache-upload ключевое слово отключает загрузку при удалённом кэшировании спавна. Это не отключает удалённое выполнение.
  • local ключевое слово предотвращает удалённое кэширование, удалённое выполнение или выполнение действия или теста в контейнере. Для genrules и тестов маркировка правила атрибутом local = True имеет тот же эффект.
  • requires-network ключевое слово разрешает доступ к внешней сети изнутри контейнера. Эта метка имеет эффект только при включенном контейнеризации.
  • block-network ключевое слово блокирует доступ к внешней сети изнутри контейнера. В этом случае разрешена только связь с хостом. Эта метка имеет эффект только при включенном контейнеризации.
  • requires-fakeroot выполняет тест или действие как пользователь и группа 0 (т. е. root-пользователь). Поддерживается только на Linux. Эта метка имеет приоритет над параметром командной строки --sandbox_fake_username.

Метки на тестах обычно используются для аннотации роли теста в вашем процессе отладки и выпуска. Обычно метки наиболее полезны для тестов C++ и Python, которые не имеют возможности временной аннотации. Использование меток и элементов размера обеспечивает гибкость в сборке наборов тестов, основанных на политике проверки кодовой базы.

Bazel изменяет поведение выполнения тестов, если находит следующие ключевые слова в атрибуте tags правила теста:

  • exclusive заставит тест выполняться в режиме «исключительно», гарантируя, что другие тесты не выполняются одновременно. Такие тесты выполняются последовательно после всех действий сборки и тестов без режима «исключительно». Удаленное выполнение отключено для таких тестов, потому что Bazel не имеет контроля над тем, что выполняется на удалённой машине.
  • exclusive-if-local заставит тест выполняться в режиме «исключительно», если он выполняется локально, но выполнит тест параллельно, если он выполняется удалённо.
  • manual ключевое слово исключит целевой объект из расширения шаблонов целевых объектов (..., :*, :all, и т. д.) и правил test_suite, которые не указывают тест явно при вычислении набора целевых объектов верхнего уровня, подлежащих построению/выполнению для команд build, test, и coverage. Это не влияет на расширение шаблонов целевых объектов или наборов тестов в других контекстах, включая команду query. Обратите внимание, что manual не подразумевает, что целевой объект не должен автоматически строиться/выполняться системами непрерывной сборки/тестирования. Например, может быть желательно исключить целевой объект из bazel test ..., потому что он требует определенных флагов Bazel, но всё ещё включать его в правильно настроенные процессы предварительного просмотра или непрерывного тестирования.
  • external ключевое слово принудительно выполнит тест (независимо от значения --cache_test_results).
Дополнительные соглашения по меткам, прикрепленным к целевым объектам тестов, см. в Соглашениях о метках в Энциклопедии тестов.
target_compatible_with

List of labels ; optional

Список constraint_valueов, которые должны присутствовать в целевой платформе для того, чтобы данный целевой объект считался совместимым. Это дополнительно к любым ограничениям, уже установленным типом правила. Если целевая платформа не удовлетворяет всем перечисленным ограничениям, то целевой объект считается несовместимым. Несовместимые целевые объекты пропускаются при построении и тестировании при расширении шаблона целевого объекта (например, //..., :all). При явном указании в командной строке несовместимые целевые объекты заставляют Bazel вывести ошибку и привести к сбою сборки или тестирования.

Целевые объекты, которые транзитивно зависят от несовместимых целевых объектов, сами считаются несовместимыми. Они также пропускаются при построении и тестировании.

Пустой список (который является значением по умолчанию) означает, что целевой объект совместим со всеми платформами.

Все правила, кроме Правил рабочей области, поддерживают этот атрибут. Для некоторых правил этот атрибут не имеет эффекта. Например, указание target_compatible_with для cc_toolchain бесполезно.

Дополнительную информацию о пропуске несовместимых целевых объектов см. на странице Платформы.

testonly

Boolean; optional; default False except for test and test suite targets; nonconfigurable

Если True, то только целевые объекты testonly (такие как тесты) могут зависеть от данного целевого объекта.

Эквивалентно, правило, которое не является testonly, не может зависеть от любого правила, которое является testonly.

Тесты (*_test правила) и наборы тестов (test_suite правила) по умолчанию являются testonly.

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

Поскольку testonly применяется во время сборки, а не во время выполнения, и распространяется вирусно через дерево зависимостей, к нему следует подходить осмотрительно. Например, выступы и фейки, полезные для модульных тестов, могут быть полезны и для интеграционных тестов, включающих те же двоичные файлы, которые будут выпущены в производство, и поэтому, вероятно, не должны быть помечены как testonly. Наоборот, правила, которые небезопасно даже включать, возможно, потому что они безусловно перезаписывают стандартное поведение, определенно следует помечать как testonly.

toolchains

List of labels ; optional; nonconfigurable

Набор целей, к чьим переменным Make имеет доступ эта цель. Эти цели являются либо экземплярами правил, предоставляющих TemplateVariableInfo , либо специальными целями для типов инструментальных цепочек, встроенных в Bazel. К ним относятся:

  • @bazel_tools//tools/cpp:current_cc_toolchain
  • @bazel_tools//tools/jdk:current_java_runtime

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

visibility

List of labels ; optional; default default_visibility from package if specified, or //visibility:private otherwise; nonconfigurable

Атрибут visibility цели управляет тем, может ли цель использоваться в других пакетах. См. документацию по видимости.

Атрибуты, общие для всех правил тестирования (*_test)

В этом разделе описаны атрибуты, общие для всех правил тестирования.

Атрибут Описание
args

List of strings; optional; subject to $(location) and "Make variable" substitution, and Bourne shell tokenization

Аргументы командной строки, которые Bazel передаёт цели при её выполнении с bazel test.

Эти аргументы передаются до любых значений --test_arg , указанных в bazel test командной строке.

env

Dictionary of strings; optional; values are subject to $(location) and "Make variable" substitution

Указывает дополнительные переменные среды, которые нужно установить при выполнении теста bazel test.

Этот атрибут применяется только к нативным правилам, таким как cc_test, py_test, и sh_test. Он не применяется к правилам тестирования, определённым Starlark. Для собственных правил Starlark вы можете добавить атрибут "env" и использовать его для заполнения TestEnvironment Provider.

env_inherit

List of strings; optional

Указывает дополнительные переменные среды для наследования из внешней среды при выполнении теста bazel test.

Этот атрибут применяется только к нативным правилам, таким как cc_test, py_test, и sh_test. Он не применяется к правилам тестирования, определённым Starlark.

size

String "enormous", "large" "medium" or "small", default is "medium"; optional; nonconfigurable

Указывает "весомость" целевого объекта теста: сколько времени/ресурсов он требует для выполнения.

Тесты юнит-тестирования считаются "небольшими", интеграционные тесты — "средними", а тесты пограничных условий — "большими" или "огромными". Bazel использует размер для определения значения таймаута по умолчанию, которое может быть переопределено с помощью атрибута timeout. Таймаут относится ко всем тестам в целевом объекте BUILD, а не к каждому отдельному тесту. При выполнении теста локально значение size также используется для планирования: Bazel старается соблюдать --local_{ram,cpu}_resources и не перегружать локальную машину запуском большого количества тяжёлых тестов одновременно.

Размеры тестов соответствуют следующим значениям таймаута по умолчанию и предполагаемому пиковому использованию локальных ресурсов:

Размер ОЗУ (в МБ) Процессор (в ядрах) Таймаут по умолчанию
маленький 20 1 короткий (1 минута)
средний 100 1 умеренный (5 минут)
большой 300 1 длинный (15 минут)
огромный 800 1 вечный (60 минут)

Переменная среды TEST_SIZE будет установлена в значение этого атрибута при запуске теста.

timeout

String "short", "moderate", "long", "eternal" (with the default derived from the test's size attribute); nonconfigurable

Сколько времени ожидается, что тест будет выполняться, прежде чем он вернётся.

В то время как атрибут размера теста управляет оценкой ресурсов, таймаут теста может быть установлен независимо. Если не указан явно, таймаут основан на размере теста. Таймаут теста можно переопределить с помощью флага --test_timeout, например, для запуска в определённых условиях, которые известны как медленные. Значения таймаута тестов соответствуют следующим временным интервалам:

Значение таймаута Временной интервал
короткий 1 минута
умеренный 5 минут
длинный 15 минут
вечный 60 минут

Для других значений, кроме вышеперечисленных, таймаут теста может быть переопределён с помощью флага Bazel --test_timeout, например, для ручного запуска в условиях, которые известны как медленные. Значения --test_timeout выражены в секундах. Например, --test_timeout=120 установит таймаут теста на две минуты.

Переменная среды TEST_TIMEOUT будет установлена в таймаут теста (в секундах) при запуске теста.

flaky

Boolean; optional; default False; nonconfigurable

Отмечает тест как ненадёжный.

При установке, тест выполняется до трёх раз, отмечая его как не пройденный только в случае неудачи каждый раз. По умолчанию этот атрибут установлен в False, и тест выполняется только один раз. Обратите внимание, что использование этого атрибута, как правило, не рекомендуется — тесты должны надёжно проходить, когда их утверждения поддерживаются.

shard_count

Non-negative integer less than or equal to 50; optional

Указывает количество параллельных фрагментов для запуска теста.

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

Если фрагментация теста включена, переменная среды TEST_TOTAL_SHARDS будет установлена в это значение при запуске теста.

Для фрагментации теста требуется, чтобы инструмент тестирования поддерживал протокол фрагментации тестов. Если он этого не поддерживает, то он, скорее всего, выполнит каждый тест в каждом фрагменте, чего вы не хотите.

См. Фрагментация тестов в энциклопедии тестов для получения подробной информации о фрагментации.

local

Boolean; default False; nonconfigurable

Принудительно запускает тест локально без песочницы.

Установка этого значения в True эквивалентна предоставлению "локального" тега (tags=["local"]).

Атрибуты, общие для всех правил бинарных файлов (*_binary)

В этом разделе описаны атрибуты, общие для всех правил бинарных файлов.

Атрибут Описание
args

List of strings; optional; subject to $(location) and "Make variable" substitution, and Bourne shell tokenization; nonconfigurable

Аргументы командной строки, которые Bazel передаёт целевому объекту при его выполнении с помощью команды run или в качестве теста. Эти аргументы передаются до тех, что указаны в bazel run или bazel test командной строке.

ПРИМЕЧАНИЕ: аргументы не передаются при запуске целевого объекта вне Bazel (например, путём ручного выполнения бинарного файла в bazel-bin/).

env

Dictionary of strings; optional; values are subject to $(location) and "Make variable" substitution

Указывает дополнительные переменные среды, которые нужно установить при выполнении целевого объекта bazel run.

Этот атрибут применяется только к нативным правилам, таким как cc_binary, py_binary, и sh_binary. Он не применяется к правилам исполняемых файлов, определённым Starlark.

ПРИМЕЧАНИЕ: переменные среды не устанавливаются при запуске целевого объекта вне Bazel (например, путём ручного выполнения бинарного файла в bazel-bin/).

output_licenses

List of strings; optional

Лицензии выходных файлов, которые генерирует этот бинарный файл. Это часть устаревшего API лицензий, который Bazel больше не использует. Не используйте это.

Настраиваемые атрибуты

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

Следующий пример объявляет различные источники для различных архитектур целевых объектов. Запуск bazel build :multiplatform_lib --cpu x86 позволит построить целевой объект с помощью x86_impl.cc, в то время как замена --cpu arm вместо этого заставит его использовать arm_impl.cc.

cc_library(
    name = "multiplatform_lib",
    srcs = select({
        ":x86_mode": ["x86_impl.cc"],
        ":arm_mode": ["arm_impl.cc"]
    })
)
config_setting(
    name = "x86_mode",
    values = { "cpu": "x86" }
)
config_setting(
    name = "arm_mode",
    values = { "cpu": "arm" }
)

Функция select() выбирает среди различных альтернативных значений для настраиваемого атрибута в зависимости от того, какие config_setting или constraint_value критерии удовлетворяет конфигурация целевого объекта.

Bazel вычисляет настраиваемые атрибуты после обработки макросов и до обработки правил (технически, между фазами загрузки и анализа). Любая обработка до оценки select() не знает, какой ветвь select() выбирает. Макросы, например, не могут изменить своё поведение на основе выбранной ветви, и bazel query может только сделать консервативные предположения о настраиваемых зависимостях целевого объекта. См. этот FAQ для получения дополнительной информации об использовании select() с правилами и макросами.

Атрибуты, помеченные как nonconfigurable в их документации, не могут использовать эту функцию. Обычно атрибут не является настраиваемым, потому что Bazel внутренне должен знать его значение, прежде чем он сможет определить, как разрешить select().

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

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

Неявные выходные данные в C++ устарели. Пожалуйста, воздержитесь от их использования в других языках, где это возможно. У нас пока нет пути устаревания, но они будут в конечном итоге устареть и в других языках.

При определении правила сборки в файле BUILD вы явно объявляете новую, именованную цель правила в пакете. Многие функции правил сборки также неявным образом включают одну или несколько выходных файлов-целей, содержание и значение которых зависят от правила. Например, когда вы явно объявляете правило java_binary(name='foo', ...) , вы также неявным образом объявляете выходной файл-цель foo_deploy.jar как член того же пакета. (Эта конкретная цель — это автономный архив Java, подходящий для развертывания.)

Неявные выходные цели являются полноправными членами глобального графа целей. Как и другие цели, они строятся по требованию, либо когда они указаны в команде сборки верхнего уровня, либо когда они необходимы как предшественники для других целей сборки. К ним можно обращаться как к зависимостям в файлах BUILD, и их можно наблюдать в выводе инструментов анализа, таких как bazel query.

Для каждого типа правила сборки документация правила содержит специальный раздел, подробно описывающий имена и содержимое любых неявных выходных данных, обусловленных объявлением данного типа правила.

Важное, но несколько тонкое различие между двумя именованными пространствами, используемыми системой сборки: метки идентифицируют цели, которые могут быть правилами или файлами, и файлы-цели могут быть разделены на файлы-цели исходного кода (или входные файлы) и производные (или выходные) файлы-цели. Это те вещи, которые вы можете упомянуть в файлах BUILD, построить с помощью командной строки или просмотреть с помощью bazel query; это пространство имен целей. Каждая цель файла соответствует одному фактическому файлу в файловой системе (пространство имен файловой системы); каждая цель правила может соответствовать нулю, одному или нескольким фактическим файлам на диске. Может быть файлы на диске, у которых нет соответствующей цели; например, файлы-объекты .o , созданные во время компиляции C++, не могут быть проинициализированы из файлов BUILD или из командной строки. Таким образом, инструмент сборки может скрывать определённые детали реализации того, как он выполняет свою работу. Это более подробно объясняется в Справочнике концепций BUILD.

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

Последнее обновление 2023-03-15 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/6.1.0/reference/be/common-definitions

Spec-Zone.ru

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