Objetos que se superponen con dependencias en WORKSPACE
Cuando sea posible, implementa una sola política de versiones en tu proyecto, necesarias para las dependencias con las que compilas y terminas en tu binario. Para otros casos, puedes bloquear dependencias:
miproyecto/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 = "..."
)
Ambas dependencias, A
y B
, dependen de diferentes versiones de testrunner
.
Para incluir ambos en myproject
sin que se generen conflictos, asígnales nombres distintos en
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"}
)
También puedes usar este mecanismo para unir diamantes. Por ejemplo, si A
y B
tienen la misma dependencia, pero la llamamos con nombres diferentes, une esas dependencias
en myproject/WORKSPACE
.
Anula repositorios desde la línea de comandos
Para anular un repositorio declarado con un repositorio local desde la línea de comandos,
usa el
--override_repository
marca. El uso de esta marca cambia el contenido de los repositorios externos sin
sin modificar tu código fuente.
Por ejemplo, para anular @foo
en el directorio local /path/to/local/foo
, usa este código:
pasa la marca --override_repository=foo=/path/to/local/foo
.
En los casos de uso, se incluye lo siguiente:
- Problemas de depuración. Por ejemplo, para anular un repositorio de
http_archive
en un directorio local, en el que se pueden realizar cambios con mayor facilidad. - Proveedores Si estás en un entorno en el que no puedes hacer llamadas de red anular las reglas de repositorio basadas en la red para que apunten a directorios locales en su lugar.
Usa proxies
Bazel recoge direcciones de proxy de HTTPS_PROXY
y HTTP_PROXY
.
variables de entorno y las usa para descargar archivos HTTP
y HTTPS
(si
especificada).
Compatibilidad con IPv6
En máquinas que solo usan IPv6, Bazel puede descargar dependencias sin cambios. Sin embargo,
En máquinas IPv4/IPv6 de pila doble, Bazel sigue la misma convención que Java,
preferir IPv4 si está habilitado. En algunos casos, por ejemplo, cuando la conexión IPv4
la red no puede resolver ni alcanzar direcciones externas, lo que puede causar excepciones de Network
unreachable
y fallas de compilación. En estos casos, puedes anular
el comportamiento de Bazel de preferir IPv6 con el
Sistema java.net.preferIPv6Addresses=true
propiedad.
En particular, haz lo siguiente:
Usar el inicio de
--host_jvm_args=-Djava.net.preferIPv6Addresses=true
opción, por ejemplo, agregando el siguiente línea en tu archivo.bazelrc
:startup --host_jvm_args=-Djava.net.preferIPv6Addresses=true
Cuando se ejecutan destinos de compilación de Java que necesitan conectarse a Internet (como como para las pruebas de integración), usa el
--jvmopt=-Djava.net.preferIPv6Addresses=true
herramienta marca. Por ejemplo, incluye en tu.bazelrc
archivo:build --jvmopt=-Djava.net.preferIPv6Addresses
Si usas
rules_jvm_external
para la resolución de la versión de dependencia, agrega-Djava.net.preferIPv6Addresses=true
al entornoCOURSIER_OPTS
para proporcionar opciones de JVM para Coursier.
Compilaciones sin conexión
Es posible que desees ejecutar una construcción sin conexión; por ejemplo, cuando viajas en una
de un avión. Para casos de uso tan simples, realiza una carga previa de los repositorios necesarios con
bazel fetch
o bazel sync
. Para inhabilitar la recuperación de más repositorios durante
la compilación, usa la opción --nofetch
.
Para las verdaderas compilaciones sin conexión, en las que una entidad diferente proporciona todos los archivos necesarios,
Bazel admite la opción --distdir
. Esta marca le indica a Bazel que primero investigue
los directorios que especifica esa opción cuando una regla de repositorio pide a Bazel que
Recupera un archivo con ctx.download
.
ctx.download_and_extract
De
proporcionando una suma hash del archivo necesario, Bazel busca un archivo que coincida con
nombre base de la primera URL y utiliza la copia local si el hash coincide.
Bazel usa esta técnica para realizar un arranque sin conexión desde la distribución
artefacto.
Para ello, recopila todos los recursos
dependencias
en un entorno
distdir_tar
Bazel permite la ejecución de comandos arbitrarios en las reglas del repositorio sin saberlo. si llaman a la red y, por lo tanto, no pueden aplicar compilaciones completamente sin conexión. Para probar si una compilación funciona correctamente sin conexión, bloquear la red manualmente (como lo hace en su arranque prueba).