Содержание
package
package(default_deprecation, default_package_metadata, default_testonly, default_visibility, features)
Эта функция объявляет метаданные, которые применяются к каждой команде в пакете. Она используется не более одного раза в пакете (файл BUILD).
Функция package() должна вызываться сразу после всех инструкций load() в начале файла, до любой команды.
Аргументы
| Атрибут | Описание |
|---|---|
default_applicable_licenses | Псевдоним для |
default_visibility | Список меток; значение по умолчанию Уровень видимости команд в этом пакете по умолчанию. Каждая команда в этом пакете имеет уровень видимости, указанный в этом атрибуте, если не указано иное в атрибуте |
default_deprecation | Строка; значение по умолчанию Устанавливает сообщение по умолчанию |
default_package_metadata | Список меток; значение по умолчанию Устанавливает список целевых объектов метаданных по умолчанию, которые применяются ко всем другим целевым объектам в пакете. Обычно это целевые объекты, связанные с объявлением пакетов и лицензий с открытым исходным кодом. См. 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
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 шаблонов.