Содержание
Пакет
package(default_deprecation, default_package_metadata, default_testonly, default_visibility, features)
Эта функция объявляет метаданные, которые применяются ко всем правилам в пакете. Она используется не более одного раза в пределах пакета (файл BUILD).
Для объявления метаданных, применяемых ко всем правилам во всём репозитории, используйте функцию repo() в файле REPO.bazel в корне вашего репозитория. Функция repo() принимает те же аргументы, что и package().
Функция package() должна вызываться сразу после всех инструкций load() в начале файла, перед любыми правилами.
Аргументы
| Атрибут | Описание |
|---|---|
default_applicable_licenses | Псевдоним для |
default_visibility | Список метки; по умолчанию Видимость по умолчанию для целей правил верхнего уровня и символических макросов в этом пакете — то есть, целей и символических макросов, которые не объявлены внутри символического макроса. Этот атрибут игнорируется, если цель или макрос указывает значение Для получения подробной информации о синтаксисе этого атрибута, см. документацию видимости. Видимость по умолчанию пакета не применяется к экспортируемым файлам, которые по умолчанию публичны. |
default_deprecation | Строка; по умолчанию Устанавливает сообщение по умолчанию |
default_package_metadata | Список меток; по умолчанию Устанавливает список целевых объектов метаданных по умолчанию, которые применяются ко всем другим целям в пакете. Как правило, это цели, связанные с объявлением пакета и лицензии OSS. Для примеров см. rules_license. |
default_testonly | Булево значение; по умолчанию Устанавливает свойство по умолчанию В пакетах под |
features | Список строк; по умолчанию Устанавливает различные флаги, которые влияют на семантику этого файла BUILD. Эта функция в основном используется сотрудниками, работающими над системой сборки, для маркировки пакетов, которые требуют специального обращения. Не используйте её, если это не запрошено кем-либо из сотрудников, работающих над системой сборки. |
Примеры
Ниже приведён пример, в котором правила в этом пакете видимы только членам группы пакетов //foo:target. Индивидуальные объявления видимости правила, если они присутствуют, переопределяют это условие.
package(default_visibility = ["//foo:target"])
Группа пакетов
package_group(name, packages, includes)
Эта функция определяет набор пакетов и связывает его с меткой. Эта метка может быть использована в атрибутах visibility.
Группы пакетов в первую очередь используются для управления видимостью. Публичная цель может быть обращена из любого пакета в дереве исходников. Приватная цель может быть обращена только из своего собственного пакета (не из подпакетов). В промежуточных случаях цель может разрешить доступ к своему пакету плюс любые пакеты, описанные одним или несколькими группами пакетов. Более подробное описание системы видимости см. в атрибуте visibility.
Пакет считается частью группы, если он соответствует атрибуту packages, или уже входит в одну из других групп пакетов, упомянутых в атрибуте includes.
Группы пакетов технически являются целями, но они не создаются правилами и не имеют защиты видимости.
Аргументы
| Атрибут | Описание |
|---|---|
name | Имя; обязательно Уникальное имя для этой цели. |
packages | Список строк; по умолчанию Список нуля или более спецификаций пакетов. Каждая строка спецификации пакета может иметь один из следующих форматов:
Кроме того, первые два типа спецификаций пакетов также могут быть префиксрованы Группа пакетов содержит любой пакет, который соответствует хотя бы одной положительной спецификации и ни одной отрицательной. Например, значение Помимо публичной видимости, нет способа напрямую указать пакеты за пределами текущего репозитория. Если этот атрибут отсутствует, он эквивалентен установке пустого списка, что также эквивалентно установке списка, содержащего только Примечание: До Bazel 6.0, спецификация Примечание: До Bazel 6.0, при сериализации этого атрибута как части |
includes | Список меток; по умолчанию Другие группы пакетов, которые включены в эту. Метки в этом атрибуте должны ссылаться на другие группы пакетов. Пакеты в ссылающихся группах пакетов считаются частью этой группы пакетов. Это транзитивно — если группа пакетов При совместном использовании с отрицательными спецификациями пакетов обратите внимание, что набор пакетов для каждой группы сначала вычисляется независимо, а затем объединяется. Это означает, что отрицательные спецификации в одной группе не влияют на спецификации в другой группе. |
Примеры
Следующее объявление package_group объявляет группу пакетов "тропические" , которая содержит тропические фрукты.
package_group(
name = "tropical",
packages = [
"//fruits/mango",
"//fruits/orange",
"//fruits/papaya/...",
],
)
Следующие объявления указывают группы пакетов вымышленного приложения:
package_group(
name = "fooapp",
includes = [
":controller",
":model",
":view",
],
)
package_group(
name = "model",
packages = ["//fooapp/database"],
)
package_group(
name = "view",
packages = [
"//fooapp/swingui",
"//fooapp/webui",
],
)
package_group(
name = "controller",
packages = ["//fooapp/algorithm"],
)
Экспортируемые файлы
exports_files([label, ...], visibility, licenses)
exports_files() определяет список файлов, принадлежащих этому пакету, которые экспортируются в другие пакеты.
Файл BUILD пакета может ссылаться напрямую только на исходные файлы, принадлежащие другому пакету, если они явно экспортированы с помощью инструкции exports_files(). Подробнее о видимости файлов.
В качестве устаревшего поведения, файлы, упомянутые как входные для правила, также экспортируются с видимостью по умолчанию, пока не переключен флаг --incompatible_no_implicit_file_export. Однако, на это поведение не следует полагаться, и необходимо активно от него отходить.
Аргументы
Аргументом является список имён файлов в текущем пакете. Также может быть указано объявление видимости; в этом случае файлы будут видны указанным целям. Если видимость не указана, файлы будут видны каждому пакету, даже если в функции package была указана видимость по умолчанию пакета. Также можно указать лицензии.
Пример
В следующем примере экспортируется golden.txt, текстовый файл из пакета test_data, чтобы другие пакеты могли его использовать, например, в атрибуте data тестов.
# from //test_data/BUILD exports_files(["golden.txt"])
glob
glob(include, exclude=[], exclude_directories=1, allow_empty=True)
Функция glob находит все файлы, соответствующие определённым шаблонам путей, и возвращает новый, изменяемый, отсортированный список их путей. Glob ищет только файлы в собственном пакете и только исходные файлы (не сгенерированные файлы и другие цели).
Метка исходного файла включается в результат, если путь файла относительно пакета соответствует одному из include шаблонов и ни одному из exclude шаблонов.