如何防止IntelliJ在运行测试时删除从生成的源编译的类?

时间:2017-01-17 23:44:59

标签: java intellij-idea annotations code-generation immutables-library

IntelliJ(v2016.3)中JUnit测试的默认配置是在启动前运行Build。通常,这是一件好事,因为它确保在运行测试之前已应用所有更改。但是,它似乎是删除生成的代码的已编译类。正如您所料,这意味着测试失败,因为生成的类的测试无法再找到他们试图测试的类!

如何保持IntelliJ的默认"在发布之前构建"没有编译生成的类的行为在运行测试时会被吹走?

现在了解一些细节。

我使用Immutables库(不是Lombok),因此使用" normal"生成的代码Java注释机制。 IntelliJ很乐意接受更改并通过注释生成Java代码。它还将在更改时编译更新的生成的Java文件。所以,一般"自动构建"行为似乎有效。对我而言,这似乎表明我已经正确设置了Annotation处理器。

当我手动运行"构建模块"或者当" Build"但是,在测试之前运行,将删除生成的Java文件的类文件。生成的Java文件不会以任何方式更改,但会删除它们编译到的类文件。对我来说,这意味着Build中没有注意Generated Source依赖关系。

我注意到的一件事是,如果我没有标记生成源作为生成源根目录的目录,那么"删除生成的类文件源文件"行为并没有发生。这样做的缺点是IntelliJ不再识别生成的类,并在使用它们的代码中将它们标记为未知。

我如何配置IntelliJ:

  • Preferences -> Annotation Processors正在使用Module content rootObtain processors from project classpath,并且已指定生产和测试源目录字段(并且在生成源文件时似乎尊重这些字段)
  • Preferences -> Compiler 使用Clear output directory on rebuild 使用Build project automatically
  • File -> Other Settings -> Annotation Processors具有与上述两点相同的配置
  • 生成源的目录标记为“生成的源目录”

我长期以来一直抨击我的头脑,试着我能想到的一切以及任何人甚至暗示的一切,但无济于事。任何有关如何使这项工作的帮助(除了"从测试配置中移除构建选项")将会非常有用并且深受赞赏。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题(对我而言)是通过删除Atlassian Clover插件来解决的。