Ẩn các phần phụ thuộc trong WORKSPACE
Bất cứ khi nào có thể, hãy có một chính sách phiên bản duy nhất trong dự án của bạn, đó là bắt buộc đối với các phần phụ thuộc mà bạn biên dịch và cuối cùng sẽ xuất hiện trong nhị phân. Đối với các trường hợp khác, bạn có thể ẩn các phần phụ thuộc:
myproject/WORKSPACE
workspace(name = "myproject")
local_repository(
name = "A",
path = "../A",
)
local_repository(
name = "B",
path = "../B",
)
KHÔNG GIAN LÀM VIỆC
workspace(name = "A")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "testrunner",
urls = ["https://github.com/testrunner/v1.zip"],
sha256 = "...",
)
B/WORKSPACE
workspace(name = "B")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "testrunner",
urls = ["https://github.com/testrunner/v2.zip"],
sha256 = "..."
)
Cả hai phần phụ thuộc A
và B
đều phụ thuộc vào các phiên bản khác nhau của testrunner
.
Đưa cả hai thành phần này vào myproject
mà không xung đột bằng cách đặt tên riêng biệt cho các thành phần đó trong
myproject/WORKSPACE
:
workspace(name = "myproject")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "testrunner-v1",
urls = ["https://github.com/testrunner/v1.zip"],
sha256 = "..."
)
http_archive(
name = "testrunner-v2",
urls = ["https://github.com/testrunner/v2.zip"],
sha256 = "..."
)
local_repository(
name = "A",
path = "../A",
repo_mapping = {"@testrunner" : "@testrunner-v1"}
)
local_repository(
name = "B",
path = "../B",
repo_mapping = {"@testrunner" : "@testrunner-v2"}
)
Bạn cũng có thể sử dụng cơ chế này để kết hợp kim cương. Ví dụ: nếu A
và B
có cùng phần phụ thuộc nhưng gọi bằng tên khác, hãy kết hợp các phần phụ thuộc đó
trong myproject/WORKSPACE
.
Ghi đè kho lưu trữ từ dòng lệnh
Để ghi đè một kho lưu trữ đã khai báo bằng một kho lưu trữ cục bộ từ dòng lệnh,
sử dụng
--override_repository
cờ. Việc sử dụng cờ này sẽ thay đổi nội dung của các kho lưu trữ bên ngoài mà không
thay đổi mã nguồn của mình.
Ví dụ: để ghi đè @foo
vào thư mục cục bộ /path/to/local/foo
,
truyền cờ --override_repository=foo=/path/to/local/foo
.
Các trường hợp sử dụng bao gồm:
- Gỡ lỗi cho vấn đề. Ví dụ: để ghi đè kho lưu trữ
http_archive
thành một thư mục cục bộ nơi bạn có thể thực hiện thay đổi dễ dàng hơn. - Nhà cung cấp. Nếu bạn đang ở trong một môi trường không thể thực hiện cuộc gọi mạng, ghi đè các quy tắc về kho lưu trữ dựa trên mạng để trỏ đến các thư mục cục bộ thay thế.
Sử dụng proxy
Bazel nhận địa chỉ proxy từ HTTPS_PROXY
và HTTP_PROXY
biến môi trường và sử dụng các biến này để tải các tệp HTTP
và HTTPS
xuống (nếu
đã chỉ định).
Hỗ trợ cho IPv6
Trên các máy chỉ hỗ trợ IPv6, Bazel có thể tải các phần phụ thuộc xuống mà không cần thay đổi. Tuy nhiên,
trên các máy IPv4/IPv6 ngăn xếp kép Bazel tuân theo cùng một quy ước như Java,
ưu tiên IPv4 nếu được bật. Trong một số trường hợp, ví dụ như khi IPv4
mạng không thể phân giải/truy cập các địa chỉ bên ngoài, điều này có thể gây ra các trường hợp ngoại lệ Network
unreachable
và lỗi bản dựng. Trong những trường hợp này, bạn có thể ghi đè
Hành vi của Bazel là thích IPv6 bằng cách sử dụng phương thức
Hệ thống java.net.preferIPv6Addresses=true
thuộc tính.
Cụ thể:
Sử dụng tính năng khởi động
--host_jvm_args=-Djava.net.preferIPv6Addresses=true
, ví dụ: bằng cách thêm thuộc tính dòng sau trong tệp.bazelrc
:startup --host_jvm_args=-Djava.net.preferIPv6Addresses=true
Khi chạy các mục tiêu bản dựng Java cần kết nối với Internet (chẳng hạn như như đối với thử nghiệm tích hợp), hãy sử dụng Công cụ
--jvmopt=-Djava.net.preferIPv6Addresses=true
cờ. Ví dụ: đưa vào.bazelrc
của bạn tệp:build --jvmopt=-Djava.net.preferIPv6Addresses
Nếu bạn đang sử dụng
rules_jvm_external
để phân giải phiên bản phần phụ thuộc, hãy thêm-Djava.net.preferIPv6Addresses=true
sang môi trườngCOURSIER_OPTS
để cung cấp các tuỳ chọn JVM cho Cô bé.
Bản dựng ngoại tuyến
Đôi khi, bạn có thể muốn chạy bản dựng ngoại tuyến, chẳng hạn như khi di chuyển trên
máy bay. Đối với những trường hợp sử dụng đơn giản như vậy, hãy tìm nạp trước các kho lưu trữ cần thiết bằng
bazel fetch
hoặc bazel sync
. Để tắt tính năng tìm nạp thêm kho lưu trữ trong
bản dựng, hãy sử dụng tuỳ chọn --nofetch
.
Đối với bản dựng ngoại tuyến thực sự, trong đó một thực thể khác cung cấp tất cả các tệp cần thiết,
Bazel hỗ trợ tuỳ chọn --distdir
. Cờ này yêu cầu Bazel nhìn vào trước
các thư mục mà tuỳ chọn đó chỉ định khi quy tắc kho lưu trữ yêu cầu Bazel
tìm nạp tệp bằng ctx.download
hoặc
ctx.download_and_extract
. Theo
cung cấp tổng băm của tệp cần thiết, Bazel tìm một tệp khớp với
basename của URL đầu tiên và sử dụng bản sao cục bộ nếu hàm băm khớp.
Chính Bazel sử dụng kỹ thuật này để tự khởi động ngoại tuyến từ bản phân phối
cấu phần phần mềm.
Để thực hiện điều này, công cụ này thu thập tất cả dữ liệu bên ngoài cần thiết
phần phụ thuộc
trong một chiến dịch nội bộ
distdir_tar
.
Bazel cho phép thực thi các lệnh tuỳ ý trong quy tắc kho lưu trữ mà không cần biết nếu chúng gọi ra mạng và do đó không thể thực thi các bản dựng ngoại tuyến hoàn toàn. Người nhận kiểm thử xem bản dựng có hoạt động chính xác khi không có mạng, chặn mạng theo cách thủ công (như Bazel thực hiện trong quá trình bootstrap thử nghiệm).