외부 종속 항목에 대한 고급 주제

<ph type="x-smartling-placeholder"></ph> 문제 신고 소스 보기 1박 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

WORKSPACE의 종속 항목 섀도잉

가능하면 프로젝트에 단일 버전 정책을 사용합니다. 즉, 이를 위해 컴파일한 종속 항목과 최종 종속 항목이 바이너리입니다. 다른 경우에는 종속 항목을 섀도잉할 수 있습니다.

myproject/WORKSPACE

workspace(name = "myproject")

local_repository(
    name = "A",
    path = "../A",
)
local_repository(
    name = "B",
    path = "../B",
)

A/Workspace

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 = "..."
)

종속 항목 AB 모두 testrunner의 서로 다른 버전에 종속됩니다. 다음 필드에 고유한 이름을 지정하여 충돌 없이 myproject에 둘 다 포함합니다. 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"}
)

이 메커니즘을 사용하여 다이아몬드를 조인할 수도 있습니다. 예를 들어 AB가 다음과 같은 경우 종속 항목은 동일하지만 다른 이름으로 호출되고 이러한 종속 항목을 조인합니다. (myproject/WORKSPACE)

명령줄에서 저장소 재정의

명령줄에서 로컬 저장소로 선언된 저장소를 재정의하려면 다음 안내를 따르세요. 사용 --override_repository 드림 플래그. 이 플래그를 사용하면 변경할 수 있습니다

예를 들어 @foo를 로컬 디렉터리 /path/to/local/foo로 재정의하려면 다음을 실행합니다. --override_repository=foo=/path/to/local/foo 플래그를 전달합니다.

사용 사례는 다음과 같습니다.

  • 디버깅 문제 예를 들어 http_archive 저장소를 더 쉽게 변경할 수 있는 로컬 디렉터리입니다.
  • 벤더링. 네트워크 호출을 할 수 없는 환경에 있는 경우 로컬 디렉터리를 가리키도록 네트워크 기반 저장소 규칙을 재정의합니다. 하세요.
를 통해 개인정보처리방침을 정의할 수 있습니다.

프록시 사용

Bazel이 HTTPS_PROXYHTTP_PROXY에서 프록시 주소를 선택합니다. 환경 변수를 만들고 이를 사용하여 HTTPHTTPS 파일을 다운로드합니다 (있는 경우 지정합니다.

IPv6 지원

IPv6 전용 머신에서 Bazel은 변경 없이 종속 항목을 다운로드할 수 있습니다. 하지만 듀얼 스택 IPv4/IPv6 머신에서 Bazel은 Java와 동일한 규칙을 따릅니다. 모든 기본 IP 주소 대신 IPv4를 선호합니다. IPv4가 네트워크에서 외부 주소를 확인/연결할 수 없으면 Network unreachable 예외 및 빌드 실패가 발생할 수 있습니다. 이러한 경우 Bazel의 동작은 java.net.preferIPv6Addresses=true 시스템 속성을 사용합니다. 특히 다음에 주의해야 합니다.

  • --host_jvm_args=-Djava.net.preferIPv6Addresses=true 시작 프로그램 사용 선택사항으로, 예를 들어 .bazelrc 파일에 다음 줄을 추가합니다.

    startup --host_jvm_args=-Djava.net.preferIPv6Addresses=true

  • 인터넷에 연결해야 하는 Java 빌드 대상을 실행할 때 (예: 인 경우) --jvmopt=-Djava.net.preferIPv6Addresses=true 도구 플래그를 사용하세요. 예를 들어 .bazelrc에 파일:

    build --jvmopt=-Djava.net.preferIPv6Addresses

  • rules_jvm_external를 사용하는 경우 종속 항목 버전 확인을 위해 -Djava.net.preferIPv6Addresses=true에서 COURSIER_OPTS 환경으로 이전 변수를 사용하여 JVM 옵션을 제공 Coursier.

오프라인 빌드

어떤 경우에는 빌드를 오프라인으로 실행해야 할 때가 있습니다. 예를 들어 비행기입니다. 이러한 간단한 사용 사례의 경우 다음을 사용하여 필요한 저장소를 미리 가져옵니다. bazel fetch 또는 bazel sync 다음 기간 중에 추가 저장소 가져오기를 사용 중지하려면 다음 안내를 따르세요. 빌드하려면 --nofetch 옵션을 사용합니다.

다른 엔터티가 필요한 모든 파일을 제공하는 실제 오프라인 빌드의 경우 Bazel은 --distdir 옵션을 지원합니다. 이 플래그는 Bazel에게 먼저 저장소 규칙이 Bazel에 ctx.download로 파일 가져오기 또는 ctx.download_and_extract 작성자: 필요한 파일의 해시 합계를 제공하고, Bazel은 첫 번째 URL의 기본 이름이며, 해시가 일치하면 로컬 사본을 사용합니다.

Bazel 자체에서 이 기법을 사용하여 배포판에서 오프라인으로 부트스트랩합니다. 아티팩트를 참고하세요. 이를 위해 필요한 모든 외부 데이터 종속 항목 내부 distdir_tar

Bazel은 알지 못하는 사이에 저장소 규칙에서 임의의 명령어 실행을 허용합니다. 완전 오프라인 빌드를 실행할 수 없습니다. 받는사람 빌드가 오프라인에서 올바로 작동하는지 테스트하고 수동으로 네트워크를 차단하세요 (예: Bazel은 자체 부트스트랩에서 test 단계)를 참조하세요.