IntelliJ (v2016.3) 中 JUnit 测试的默认配置是Build
在启动前运行。通常,这是一件好事,因为它确保在运行测试之前已经应用了所有更改。但是,它似乎正在删除生成代码的编译类。正如您所料,这意味着测试失败,因为生成的类的测试无法再找到他们试图测试的类!
如何在运行测试时保持 IntelliJ 的默认“启动前构建”行为,而不会让我编译生成的类被吹走?
现在了解一些细节。
我使用的是Immutables库(不是 Lombok),所以它是使用“普通”Java Annotations 机制生成的代码。IntelliJ 很高兴地接受更改并通过注释生成 Java 代码。它还将在更新生成的 Java 文件发生更改时对其进行编译。因此,一般的“自动构建”行为似乎正在起作用。对我来说,这似乎表明我正确设置了注释处理器。
但是,当我手动运行“构建模块”或在测试之前运行“构建”时,生成的 Java 文件的类文件将被删除。生成的 Java 文件不会以任何方式更改,但它们编译成的类文件会被删除。对我来说,这意味着 Build 有一些东西没有关注 Generated Source 依赖项。
我注意到的一件事是,如果我不将生成源的目录标记为 Generated Source Root,则不会发生这种“删除生成的源文件的类文件”行为。这样做的缺点是 IntelliJ 不再识别生成的类,并在使用它们的代码中将它们标记为未知。
我如何配置 IntelliJ:
Preferences -> Annotation Processors
正在使用Module content root
,Obtain processors from project classpath
, 并指定了生产和测试源目录字段(并且似乎在生成源文件时尊重那些)Preferences -> Compiler
不使用和正在使用_Clear output directory on rebuild
Build project automatically
File -> Other Settings -> Annotation Processors
具有与上述两点相同的配置- 正在生成源的目录被标记为 Generated Source 目录
我一直在为此苦苦挣扎太久,尝试了我能想到的一切以及任何人甚至暗示的一切,但无济于事。任何有关如何使这项工作的帮助(“从测试配置中删除构建选项”除外)都将非常有帮助并深表感谢。