我正在编写一个构建后工具,它在bazel构建之后合成maven pom文件。我正在使用aspects收集有关各个目标的相关信息
其中一个特性涉及向相关pom文件添加外部jar依赖项
假设我们的工作区包含以下目标:
maven_jar(
name = "com_google_guava_guava",
artifact = "com.google.guava:guava:19.0",
)
我们的一个构建文件包含一个依赖于番石榴的目标
scala_library(
name = "somen
我正在试着运行一个bazel项目
你能帮我找到需要执行以下命令的文件夹名吗?看起来datagen和构建文件都存在,尽管bazel仍然抱怨找不到它
bazel run //datagen:data_gen -- --num=1 --output_path=demo_data.ndjson
我尝试在“healthcare/fhir/immunizations\u demo”文件夹中运行它,但失败了,错误如下
INFO: Invocation ID: 26092ad2-2ae0-49c9-ac2c-
我正在尝试编译以下heron分支
在ubuntu 15.10中使用bazel 0.3.1。在工作区中,我引用了另一个包含pex bazel规则的回购协议,位于
我得到了以下错误(有趣的是,在ubuntu14.04、ubuntu16.10、centos7和mac中没有出现)。如果有任何帮助,我们将不胜感激
bazel build--config=ubuntu--verbose\u失败heron/。。。
错误:com.google.devtools.build.lib.packages.bui
我正在尝试使用bazel编译一些不完整的、依赖于平台的C#代码,我在定义平台时遇到了很多问题
我定义了两个平台:
platform (
name = "darwin",
constraint_values = [
"@bazel_tools//platform:osx",
],
)
platform (
name = "windows",
constraint_values = [
"@bazel_tools//platform:windows"
我需要在bzl文件中使用环境变量。现在是这样硬编码的
我可能可以在下面的_impl方法中读取环境变量,但是如何设置上面的全局变量呢
def _impl(ctx):
#todo: need to get this env variable and use it instead of hardcoded paths where ever rpi is defined above
#PI_TOOLCHAIN_ROOT_DIR=${HOME}/${DOCKERUSER}/.leila/
我与Bazel一起构建项目。
生成文件如下所示:
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
cc_binary(
name = "lsp",
srcs = glob([
"some srcs",
]),
copts = [
"-I'some
根据bazelbuild/rules_docker的文档,应该可以在OSX上使用这些容器映像,并且它还声称,没有docker也可以这样做
These rules do not require / use Docker for pulling, building, or pushing images. This means:
They can be used to develop Docker containers on Windows / OSX without boot2docker or
标签: Bazel
tensorflow-serving
我正在运行一个tensorflow服务容器,前面的所有步骤都很好,但在最后一个块中,我遇到了一些问题:
git clone --recurse-submodules https://github.com/tensorflow/serving
cd serving/
bazel build -c opt tensorflow_serving/...
root@15bb1c2766e3:/serving# bazel build -c opt tensorflow_serving/.
当Bazel目标运行shell命令时,是否存在假定始终位于路径中的工具列表
这与创建隔离的生成环境相关。AFAIU(请参阅)默认情况下,Bazel在严格模式下从/bin和/usr/bin拾取工具
但是,关于这些内容的最低限度,最终可以假设什么呢?例如,我看到awk被大量使用。但是,还有git,听起来像是边界线
我想,确切的设置可能与Google internal Bazel希望在Google的build imagesbin目录中找到的内容相符。至少对于谷歌开源的BUILD规则
是否有这样一个确定
标签: Bazel
bazel-extra-action
我在Bazel构建中使用了两个后续的额外动作。我想知道是否有一种方法可以指定第一个额外_操作生成的输出文件将用作另一个额外_操作的输入(两者在同一构建期间执行)
我使用bazel extra_操作在bazel编译时执行lint工具。
这很有效。对于源代码文件的每个lint,lint工具将生成一个特殊的输出:*.lob。
然后,我想在后续操作中再次执行该工具。链接步骤可能是一种选择,因为此时所有编译都已准备就绪(但如果有人知道要使用的其他操作,如果您能与我们分享,我将不胜感激)。这一次,所有的.l
我有许多BUILD文件需要Jetty或其他常见Java库(SLF4J、Lucene、Guava等)。其中每一个都有一组它引用的其他jar。我想知道在大型项目中组织这些声明及其依赖关系的最佳实践
例如,使用generate_workspaceviabazel run//src/tools/generate_workspace--artifact=org.eclipse.jetty:jetty server:9.3.8.v20160314
# The following dependencies w
我们的bazel工作区文件包含各种外部依赖项,例如gtest:
new_http_archive(
name = "gtest",
url = "https://github.com/google/googletest/archive/release-1.7.0.zip",
build_file = "thirdparty/gtest.BUILD",
strip_prefix = "googletest-release-1.7.0",
sha256 = "b58cb7547a
标签: Bazel
bazel-extra-action
我有一个操作\u侦听器:
action_listener(
name = "foo_listen",
mnemonics = [
"Foo", # Foo might usually take several minutes
],
extra_actions = [
"foo_action_pre", # Start some processing
"foo_action_post", # Finish parts
我是bazel工具的新手。
构建现有bazel工作区时,错误如下所示:
未定义名称“new_http_archive”。
在最新版本的bazel中,此规则似乎已被弃用,bazel 0.29.1中是否有任何等效代码?new_http_archive已合并到Starlarkhttp_archive规则中
http_archive(
name = "...",
build_file = "some/repo.BUILD",
)
将以下内容添加到您的工作区文件中:
load("@baz
在Bazel上可以找到一个例子,默认情况下,Bazel不执行任何标题隐私检查。但是,在clang和Bazel的最新版本下,可以使用分层检查功能启用所谓的分层检查验证。例如,通过OP的示例存储库和Bazel 4.0.0,我看到:
$ CC=clang bazel build //sub --features layering_check
INFO: Analyzed target //sub:sub (16 packages loaded, 56 targets configured).
INFO
我需要编写一个Bazel存储库规则,根据所需版本将mysql二进制文件下载到操作系统和体系结构
我将从用户那里获得所需的版本,从存储库\u os.name获取操作系统,但我不确定如何访问该体系结构
当前的非密封代码使用os.arch作为一种足够好的启发式方法(是的,我知道它不精确)。除了使用存储库执行请求uname-m。您还可以通过执行不同的命令使其在Windows上工作,具体取决于存储库_ctx.os.name(这与JVM中的os.name相同,因此如果它包含win,您可以执行Windows命
我想通过bazel构建特使,我在我的pc上手动下载一些包,然后我将http_存档更改为本地_存储库,但它告诉我“本地_存储库”的名称没有定义。本地存储库是否需要任何加载操作
本地存储库可以在工作区中使用,但不能在my.bzl文件中使用
WORKSPACE:
workspace(name = "envoy")
load("//bazel:api_repositories.bzl", "envoy_api_dependencies")
envoy_api_dependencies()
load("/
假设您正在使用bazel来管理一个大型和多样化项目的构建(它的设计目的是做什么)。然后,您开始收到关于中版本崩溃的报告。也许这些是在开发人员的机器上,你没有访问权限,也许它们在瞬态CI容器中,关键是在大多数崩溃时你没有可靠的访问权限
假设这些崩溃中的大多数是bazel服务器死亡。可能它挂起了grpc调用,可能是Java堆OOM异常
你如何能:
默认情况下启用良好的日志记录(bazel客户端和服务器),以便有效地执行后期检查
提供bazel何时开始执行构建或测试操作以及何时完成每个操作的时间戳日志
我想运行一组Bazel目标。我的构建文件如下所示
load("@rules_java//java:defs.bzl", "java_binary")
java_binary(
name = "run_me",
srcs = glob(["src1/main/java/com/example/*.java"]),
tags = ["java", "good"],
)
java_binary(
name = "me_also",
srcs = glob([
我有一个Bazel项目,有很多单元测试,其中一个子集需要GPU支持
我想将具有GPU需求的单元测试映射到远程策略,但将所有其他单元测试保持为沙盒,在本地运行。由于所有测试共享相同的助记符(TestRunner),我不确定如何使用strategy或strategy_regexp参数来实现这一点
Bazel是否支持此用例?或者您必须将所有测试或无测试映射到远程执行吗
亲切的问候
我有一个Bazel项目,它依赖于构建机器上安装的LibTLS,这使得事情变得不封闭。所以我开始尝试重构一些东西,让项目在显式依赖项中包含gnutls,但这变成了一个兔子洞:当我从源代码构建它时,它的配置脚本失败,没有找到Libnettle 3.4.1。我怀疑我可以重复并循环到构建中。。。但在我花很多时间做这件事之前:
是否有人已经设置了bazel工作区/存储库/目标来生成TLS库,以便我可以复制它
我在bazel的文档中找不到任何关于keystore的规则,或者在android\u binary的参数中找不到任何关于签名的参数。那么,我如何构建一个带有签名的发布apk呢?这个问题是在上提出的,它还包含一个解决方案和一些背景。这个问题是在上提出的,它还包含一个解决方案和一些背景。目前,Bazel不支持对apk进行签名。
正如我们在文件中看到的:
android\u binary创建一个name\u unsigned.apk:上述文件的一个未签名版本,可以在向公众发布之前使用发行密钥进行签名
可能只是以错误的方式将代码作为cc_二进制目标创建测试,然后编写一个shell脚本或其他工具来调用Bazel来构建它们并检查返回代码。但这不是最干净的方式
因此,shell脚本将对Bazel进行一系列调用,以执行类似的操作。至少你不必弄清楚Bazel的编译器调用,但是你失去了Bazel良好的集成测试
bazel build //tests:test_that_should_fail_at_compile_time
if [ $? != 0 ]; then
echo "Test Passe
如何从skylark获取沙盒工作人员将执行的绝对路径
我有很多规则,需要在skylark中为action命令添加一个参数。该参数始终等效于“-fdebug prefix map=$(/bin/readlink-f.)=.”。我需要路径,这样我就可以教我的工具去掉沙箱路径并留下相对路径。访问该路径的最佳方式是什么?作为一种解决方法,您可以使用blaze bin符号链接
但是,通常不能(特别是如果使用--define)
你应该用blaze规则包装你的脚本并使用blaze run是否存在readlin
我正在尝试实现BuildEventService的服务器,以便让bazel将其BuildEventProtocol消息导出到它。我正试图找出如何在没有竞争条件的情况下读取测试运行的日志,尤其是由于bazel在本地机器上重复使用相同的路径进行多次运行,以及BES的默认异步性质,这似乎非常困难
例如:
作为事件流的一部分,我得到以下信息:
EventStream event:
stream_id {
build_id: "a4a34ca2-fc4b-483d-b4ab-b4546bdb2c4e"
我的动机是:我们的代码库分散在至少20 git回购协议中。我想用一个构建系统将所有内容整合到一个git回购中。目前我们使用SBT,但我们认为构建过程会花费太长时间,因此我正在研究使用Bazel替代的可能性
我们的大多数代码库使用Scala2.12,一些代码库使用Scala2.11,其余的代码库需要在Scala2.11和Scala2.12下构建
我正试着用它
通过在我的工作区中调用scala\u存储库,我可以使用scala 2.12进行构建:
scala_repositories(("2.12.6
我正在尝试将Bazel与一个旧的、基于make/shell的构建系统一起添加。我可以很容易地使用shell命令,作为早期的先决条件,返回旧构建系统构建的某个工具或库的绝对路径。我可以在genrule()中使用这些命令,它将所需的文件(如头文件和lib)复制到Bazel中,以cc_库()的形式公开
我发现,如果命令使用具有绝对路径的文件,则genrule()不会检测到依赖关系—沙箱不会捕获它。在某种程度上,我(ab)使用了这种行为
安全吗?Bazel的某些未来更新是否会在genrule中的命令中以
我正在根据为我的项目编写分析时间测试,我想知道报告失败的最有用的方法是什么
使用unittest.bzl模块,我使用了asserts.equals、asserts.true等,并发现日志中的错误报告有所欠缺。例如,如果一个断言.true失败,则错误消息为预期条件为true,但为false,没有提及哪一行或预期条件为true。在一个包含大量测试的文件中,这不是很有用!我知道可以将消息作为参数添加到这些断言中,但是为每个断言定制消息也不理想。有没有办法得到断言失败所导致的回溯?或者以任何其他方式访问
我想为jvm\u flags属性添加$(位置)扩展到rules\u scala,我在数据属性中设置了依赖项,但由于:
$(location)表达式中的标签'//src/java/com/google/devtools/build/lib:worker'不是此规则声明的先决条件。
我在数据属性的标签上定义了目标中的依赖项,如下所示:
scala_specs2_junit_test(
...
data = ["//src/java/com/google/devtools/build/
我正在尝试将Make项目转换为Bazel。当前,makefile检测正在使用的编译器并相应地设置某些CXXFLAG(并非所有编译器都理解所有标志)
例如:
ifeq ($(shell $(CC) -dM -E -x c++ /dev/null | grep __clang__),)
CXXFLAGS=-DUSE_GCC
else
CXXFLAGS=-DUSE_CLANG
endif
(类似于编译器版本的代码。)
我如何在bazel实现这一点?编译器和要使用的标志之间的关系应该在项目中的某个地方
我已自动生成.cc源代码和运行.cc生成器的Starlark规则:
生成文件:
generate_cc(
name = "foo_generated"
) # runs an executable that generates foo.h, foo.cc
def generate_cc_impl(ctx):
# generate .h, .cc files
# ...
cc_info = native.cc_library(...) # wrap .h, .cc files
如文件所述,有两个标志用于指定Bazel在从网络下载文件之前可以检查的缓存目录:--repository\u cache和--distdir
它们之间有什么区别?存储库缓存和分发文件目录中都有更广泛的散文文档。简短的版本是repository cache,它是Bazel内部使用的内容寻址缓存。distribution files目录由存档文件名键入,并希望完全由用户提供
假设我有一个由以下规则生成的二进制文件:
cc_binary(
name = "script",
srcs = ["script.c"],
)
然后,我在测试中使用此二进制文件:
cc_test(
name = "test",
srcs = ["test.cc"],
data = [":script"],
)
我的问题是:是否可以通过bazel本身更改此二进制文件的所有权(
作为我们创建bazel maven过渡互操作工具(从粒度更大的bazel Jar创建maven大小的Jar)的工作的一部分,
我们已经编写了一个方面,它在整个bazel repo的bazel构建上运行,并写入txt文件输出
我们只想为非现金目标编写这些方面的输出
更好的做法是在运行结束时有一个列表,其中包含所有运行的目标(不会因为它们被缓存而被跳过)
是1。二,。可能吗
我们只想为非现金目标编写这些方面输出
我不是100%确定你在这里的意思。无法检测目标是否已缓存。但是,输出文件将被缓存。如果使
默认情况下,在执行bazel构建…时,我有一些不想包含的目标。如何标记它们,使它们在通过“bazel build//a/b/c:foo”显式构建之前不会被构建?您可以向每个目标添加一个可选标记,并使用--build\u tag\u fitlers。下面是bazel帮助构建的内容--long说:
--生成标记过滤器(以逗号分隔的选项列表;默认值:“”)
指定以逗号分隔的标记列表。每个标记可以是可选的
前面带有“-”以指定排除的标记。只有这些目标才会被取消
至少包含一个包含的标记且不包含任何
排除的
我用以下内容为glfw创建了一个存储库:
load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository")
new_git_repository(
name = "glfw",
build_file = "BUILD.glfw",
remote = "https://github.com/glfw/glfw.git",
tag = "3.2.1",
)
我将BUILD.glfw放在工作区根目录中
我使用bazel宏在源文件的子集上运行python测试。与此类似:
def report(name, srcs):
source_labels = [file for file in srcs if file.startswith("a")]
if len(source_labels) == 0:
return;
source_filenames = ["$(location %s)" % x for x in source_labels]
n
我是Bazel(版本0.28.1)的新手。
如何在另一个目录中包含头文件?下面的目录结构代表了我的问题
.
├── WORKSPACE
├── src
│ ├── Makefile
│ ├── hellomake.c
│ ├── hellofunc.c
│ └── BUILD
└── include
└── hellomake.h
该树使用src中的Makefile构建良好。但是,使用Make,我可以引用带有“-I../include”的include文件。当我试图用B
我有一个Java项目要转换成Bazel。
与Java项目的典型情况一样,有些属性文件带有占位符,需要在构建时解析/替换这些占位符。
某些值可以硬编码到生成文件或BZL文件中:
BUILD_PROPERTIES={“pom.version”:“1.0.0”,“pom.group.id”:“com.mygroup”}
一些变量是“stamps”(例如BUILD_TIMESTAMP、GIT_REVISION等):这些变量的源是volatile-status.txt和stable-status.txt
我想通过workspace_status_命令将CI的版本号传递给bazel,从而对构建工件进行版本化。有时,我想在人工制品的名称中包含构建编号
在编写宏时(当我试图使用ctx.info_文件时),有没有办法访问ctx?到目前为止,我似乎能够访问这样的信息只是在新的规则时,创建一个新的规则,在这种情况下是有点尴尬
我想拥有一个版本号或类似的信息是非常常见的用例,所以我想知道如何访问这些信息是否更简单。否,您确实需要定义一个自定义规则,以便能够使用从workspace\u status\u命令通过
在Bazel工作区的包之间添加限制是很有用的。类似于标记为“库”的包可能不依赖于标记为“应用”的包
我记得听说这是Blaze最初支持的一个功能,但查看文档时,似乎在任何地方都没有提到它
有可能对Bazel做这样的事情吗 Bazel的可见性标签用于限制对包裹的访问。您感兴趣的可能是“package_group”风格
摘自:
这个应用程序的用例是什么?单个规则可以根据它们的名称或它们公开的提供者来确定它们是否依赖于其他规则类。我主要考虑使用这种规则来帮助将单个存储库拆分为多个相互连接的包。例如,添加
我想简化bazel monorepo的依赖项更新过程,我们想按照rootBUILD.bazel中定义的顺序运行这些命令(go目录包含所有go代码):
这些命令基本上会更新工作区中的任何新依赖项,然后重新生成go代码。我猜这可以通过一个规则来实现,但我不知道如何让它发挥作用
bazel run //:gazelle
bazel run //:gazelle -- update-repos -from_file=go.mod`
bazel run //:gazelle
我已经撤销了最近的德雷克回购协议”https://github.com/RobotLocomotion/drake“我正在努力
$run bazel build/..
但是bazel返回了以下错误
错误:/home/nathan/drake/tools/workspace/os.bzl:73:13:无效的转义序列:\(.您可以通过传递标志--compatible\u restrict\u string\u escapes=false ERROR:/home/nathan/drake/tools/
我刚开始使用Bazel,我正在运行是否有一种简单的方法可以在每次运行Bazel build时进行集成?您可以将其作为一个测试规则来实现,其中ctx.file\u操作可用于生成一个shell脚本,该脚本在“检查”模式下运行Buildinger。如果buildifier生成任何输出(例如,文件格式不正确),shell脚本将退出非零,如果一切正常,shell脚本将退出零
然后,您可以在所有构建文件中调用此规则作为测试,以便“bazel测试…”将其选中
(这可能不是一种“简单的方式”,但它是一种方式。)
似乎有一个make-env变量workspace可以实现这一点
但是我不知道如何将这个变量传递给bazel规则
exports_files([
"configure.py",
])
py_binary(
name = "configure",
srcs = [
"configure.py",
],
data = [
"//tensorflow/tools/git:gen_git_source.py",
"//
在Bazel中,您可以使用以下工具多次重新运行测试:
bazel test --runs_per_test=<n> <target>
通过--notest_keep_go将导致Bazel在测试失败后立即退出。因此,您可以将--notest\u keep\u going与一个高得离谱的--runs\u per\u test结合使用,通过--notest\u keep\u going将导致Bazel在测试失败后立即退出。因此,您可以将--notest\u keep\u go
我想将“build”或“fail”状态添加到bazel--noimplicit_deps query deps(…)的输出中。我能想到的唯一方法是为每个目标运行bazel build
有没有更直接的方法
提前感谢不幸的是,query和build的输出没有1-1映射cquery在目标方面相当于build,因为这是直接调用build时配置构建的输出。考虑到这一点,在没有实际构建的情况下,您如何期望查询操作告诉您构建的状态?
这是一个
我正在为scala_库添加对bazel覆盖范围的支持…。我使用scalac插件来进行实际的检测和测量,但是我很难弄清楚scalac插件在哪里写入覆盖率数据
虽然我已经在我的skylark规则中确认覆盖范围已启用,但测试运行者似乎设置了一组,但它似乎没有设置
我可以对我可能做错的事情提供一些指导如果没有更多的数据(理想情况下是复制案例),很难判断发生了什么。最可能的情况是,您的规则没有报告任何包含插入指令的\u文件()的覆盖文件。如果没有插入指令的文件,Bazel不会设置COVERAGE
我正在编写一个调用另一个Bazel项目的存储库规则。我当前的方法是将附加项目构建为部署jar。我希望用户能够实例化规则,如:
jar_path = some/relative/path
my_rule(name = "something", p_arg="m_arg", binary=jar_path)
然后给定jar_路径和参数,我希望存储库规则在shell中执行以下命令:
java -jar $(SOME_JAR) $(ARGUMENTS_PROVIDED_BY_RULE)
问题
首先
我希望获得目标的所有依赖项的相互依赖关系,以便将此信息提供给二进制文件(用于静态分析)
我定义了一个通过直接依赖项循环的规则。如何获取每个依赖项的依赖项,以递归方式发现整个图?有可能吗?如果没有,是否有其他方法
def _impl(ctx):
for i, d in enumerate(ctx.attr.deps):
# I need to get dependencies of d somehow here
根据您想要的确切信息,Aspects可以执行您想要
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 14 页