【问题标题】:IntelliJ Idea "Make" causes rebuild while running JUnit TestIntelliJ Idea“Make”在运行 JUnit 测试时导致重建
【发布时间】:2013-10-23 09:53:08
【问题描述】:

我正在尝试从 Eclipse 迁移到 Idea,并且在尝试执行 JUnit 时遇到了困难。该应用程序是具有 10k+ java 类的遗留应用程序。

每当我运行任何 JUnit 时,要么需要 3-4 分钟来编译测试用例然后执行它,要么它会为那个特定的 JUnit 类提供 ClassNotFoundException。

我已经完成了项目的完整构建(大约需要 9 分钟)。我希望在构建之后,只有修改过的文件应该在“Make”期间重新编译。就我而言,由于我没有更改任何文件,因此 JUnit 应该立即执行。

我正在使用 IntelliJ Idea 12 社区版,并且在编译器设置中选中了“使用外部构建”。

我是否遗漏了任何设置或做错了什么?

编辑: 在运行 JUnit 时,我观察了输出类目录,看起来它正在删除生成的类并再次编译它们!

【问题讨论】:

    标签: java intellij-idea


    【解决方案1】:

    事实证明,IntelliJ IDEA 不喜欢您的整个项目中出现单个错误,即使错误出现在与您正在运行的测试完全无关的某个类中。可能是 Make 进程认为包含编译错误的文件需要重新编译。但即便如此,为什么要清除已编译的类并重新编译它们对我来说仍然是个谜。

    解决此问题的方法是确保您的项目中没有错误。一旦我修复了所有编译错误并进行了完全重建,测试现在需要大约 2-3 秒才能启动。

    【讨论】:

    • 这不是 IDEA 的事情,而是 javac 的事情。并且默认idea使用javac编译。您可以通过更改编译器设置以使用 eclipse 编译器来修改该行为(移动过去的编译错误是 eclipse 编译器的功能,而不是 eclipse IDE)。将其设置在 Compiler > Java Compiler > Use Compiler 上,然后选择该选项,您可以选择底部的“Proceed on errors”选项。我相信这会解决你原来的问题。 (我还是用javac编译器,只玩过eclipse编译器。)
    • 我可以确认这个 is 特定于想法(并且我正在使用 Eclipse 编译器)。我可以立即在 Eclipse 中为同一个项目运行测试(出现编译错误)。
    【解决方案2】:

    当您保存 JUnit 配置并对其进行编辑时,您可以编辑“启动前”部分。您可以从那里删除“Make”并输入“Make, no error check”。这应该会加快构建过程并解决问题。

    在 IDEA 13.1.5 上测试

    【讨论】:

    • 如果您不想制作整个项目,而只制作您想要测试的部分,则此方法不起作用。 Eclipse 处理了这个奇妙的事情,IDEA 失败了。
    【解决方案3】:

    为了确保我们以相同的方式使用编译、制作、构建和重建这些术语,请参阅帮助指南中的编译类型(Basic Concepts > Compiler and Builder > Compilation Types)或通过其webhelp equivalent

    默认情况下,当您运行单元测试或应用程序时,IDEA 会执行 Make,因此应该只编译自上次运行以来发生更改的类。一个潜在的问题(尤其是遗留项目)在于依赖关系解析。 make 过程还将编译任何已更改的依赖项。如果一个项目有一些循环/交叉依赖,它可能会“混淆”递归依赖检查,因此可以编译一个或多个完整的模块。这可能是您遇到的问题。

    即使没有文件更改,“不太理想”的依赖映射也可能导致重新编译。请记住,制作过程仍应运行。正是该进程检查修改的类,然后启动编译。但如果代码没有改变,那应该只需要一两秒钟。需要检查/尝试的几件事:验证在您的单元测试运行/调试配置(Run > Edit Configurations)的“Before Launch”部分中是否只有“Make”。 (这应该是默认设置,可以在该对话框的默认部分中进行修改)。最后,您可以尝试使 IDEA 缓存/索引无效(File > Invalidate Caches)并重新启动 IDEA。重新启动时,IDEA 将需要重新索引您的项目,并且您将需要/应该运行另一个完整的重建。 可能导致重新编译的索引中有一些损坏。

    为了确认清楚,请确保您使用的是最新版本的 IDEA (12.1.6)。

    【讨论】:

    • 感谢您的建议。
    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2016-10-18
    • 2017-05-11
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    相关资源
    最近更新 更多