对于同一个项目,我都在 the Bazel IntelliJ plugin 工作和命令行。
每当我从 IntelliJ 中“同步项目与 BUILD 文件”时,或者做一个新的 bazel build
从命令行,无论我最后做哪一个,都会迫使另一个完全重建我的项目(有 100 个目标)。
例如,如果我从 IntelliJ 中运行一个测试,然后从命令行执行一些操作,例如 bazel build //...
甚至从 CLI 运行相同的测试,我得到:
$ bazel test //foo:bar
INFO: Build options have changed, discarding analysis cache.
...
这迫使我的项目重建 Protobuf 和其他速度不快的 native 事物。
为什么是这样?
例如,我可以看到,当 IntelliJ 调用一个测试时,它对
bazel
有完整的参数集。命令,我从未在 CLI 中指定任何命令:/usr/local/bin/bazel test --tool_tag=ijwb:IDEA:ultimate \
--curses=no --color=yes --experimental_ui=no \
--progress_in_terminal_title=no --runs_per_test=1 \
--flaky_test_attempts=1 \
--build_event_binary_file=/var/folders/08/fk59w_xd4zz2phs6q6r3r5mc0000gn/T/intellij-bep-b37bc093-86b4-4a03-9599-a45e7285f6ac \
--nobuild_event_binary_file_path_conversion \
--test_filter=com.spotify.spyglass.knightcrock.CommitInfoParserTest#
-- //knightcrock-consumer:CommitInfoParserTest
我所经历的正是 https://github.com/bazelbuild/bazel/issues/3433 中所描述的。 ,因为在错误的地方打开而被关闭,没有太多评论。
最佳答案
导致重新运行分析的特定选项是 --test_filter
.其他选项不应影响构建配置,因此如果您在命令行上指定相同的测试过滤器,则不应看到重新运行分析。
修复此问题以便并非所有分析都重新运行需要配置调整,这是一项正在积极进行的大量工作。
但请注意,仅应重新运行分析。仍然有一个本地 Action 缓存,所以 bazel 应该注意到并不是所有的东西都需要真正重建。通过运行 --subcommands
来确认这一点可能会很好。查看当您从命令行尝试使用不同的 --test_filter
时 bazel 运行的内容.
此外,可能值得提交一个关于打印哪些选项导致分析缓存被删除的问题,以便更容易诊断这类事情。
关于intellij-idea - 为什么每当在 IntelliJ 和命令行之间切换时 Bazel 都会进行完全重建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53012722/