Intellij idea 为什么每次在IntelliJ和命令行之间切换时,Bazel都要进行全面重建?

Intellij idea 为什么每次在IntelliJ和命令行之间切换时,Bazel都要进行全面重建?,intellij-idea,bazel,Intellij Idea,Bazel,对于同一个项目,我同时在和命令行中工作 无论何时我从IntelliJ中重新“将项目与构建文件同步”,或从命令行执行新的bazel构建,最后一次执行的操作都会强制另一个执行项目的完整重建(目标为100秒) 例如,如果我从IntelliJ中运行测试,然后从命令行执行类似于bazel build/…的操作,甚至从CLI运行相同的测试,我会得到: $ bazel test //foo:bar INFO: Build options have changed, discarding analysis ca

对于同一个项目,我同时在和命令行中工作

无论何时我从IntelliJ中重新“将项目与构建文件同步”,或从命令行执行新的
bazel构建
,最后一次执行的操作都会强制另一个执行项目的完整重建(目标为100秒)

例如,如果我从IntelliJ中运行测试,然后从命令行执行类似于
bazel build/…
的操作,甚至从CLI运行相同的测试,我会得到:

$ bazel test //foo:bar
INFO: Build options have changed, discarding analysis cache.
...
这迫使我的项目重建Protobuf和其他不快的本地东西

为什么会这样

例如,我可以看到,当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

我所经历的正是中所描述的,由于在错误的位置打开而关闭,没有太多注释。

导致重新运行分析的特定选项是
--test\u filter
。其他选项不应影响构建配置,因此如果在命令行上指定相同的测试筛选器,则不应看到正在重新运行分析

要解决这个问题,使不是所有的分析都能重新运行,需要进行配置调整,这是一项正在积极进行的巨大工作

但请注意,只应重新运行分析。仍然有一个本地操作缓存,所以bazel应该注意到并不是所有的东西都需要重建。通过使用
--subcommands
运行来确认这一点可能会更好,以查看当您使用不同的
--test_filter
从命令行尝试时,bazel会运行什么

此外,可能值得提出一个关于打印哪些选项导致分析缓存被删除的问题,以便更容易诊断此类问题。

已提交,用于显示哪些标志导致分析缓存被清除。