Spec-Zone.ru › Bazel 6.2

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

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

Содержание

  • Токенизация оболочки 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

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

Этот атрибут не влияет на способ сборки, но может повлиять на вывод диагностики средства сборки. Средство сборки выводит предупреждение, когда правило с атрибутом 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 блокирует доступ к внешней сети изнутри песочницы. В этом случае разрешена только коммуникация с localhost. Эта метка имеет эффект только при включённой песочнице.
  • Ключевое слово 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 поставщика.

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 и не перегружать локальную машину запуском большого количества тяжёлых тестов одновременно.

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

Размер ОЗУ (в МБ) CPU (в ядрах CPU) Таймаут по умолчанию
маленький 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

Помечает тест как ненадёжный (flaky).

Если установлено, выполняет тест до трёх раз, отмечая его как не пройденный только в случае неудачи каждый раз. По умолчанию этот атрибут установлен в 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-05-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.2.0/reference/be/common-definitions

Spec-Zone.ru

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