代码之家  ›  专栏  ›  技术社区  ›  matt b

为什么在intellij和命令行之间切换时bazel会进行完全重建?

  •  1
  • matt b  · 技术社区  · 6 年前

    对于同一个项目,我都在工作。 the Bazel IntelliJ plugin 以及命令行。

    每当我从IntelliJ中“同步项目与生成文件”,或执行新的 bazel build 从命令行中,无论我最后做了什么,都会强制另一个对我的项目进行完全重建(有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
    

    我所经历的正是 https://github.com/bazelbuild/bazel/issues/3433 ,但由于在错误的地方打开而没有发表任何评论。

    1 回复  |  直到 6 年前
        1
  •  2
  •   ahumesky    6 年前

    导致重新运行分析的特定选项是 --test_filter . 其他选项不应影响生成配置,因此,如果在命令行中指定相同的测试筛选器,则不应看到重新运行分析。

    修复这一点,从而不是所有的分析都重新运行,需要配置修剪,这是一个很大的努力,正在积极工作。

    但请注意,只有分析应该重新运行。仍然有一个本地动作缓存,所以bazel应该注意到并不是所有的东西都需要重建。通过运行 --subcommands 从命令行尝试使用不同的 --测试过滤器 .

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