【问题标题】:Unable to import generated classes using wildcard in IntelliJ无法在 IntelliJ 中使用通配符导入生成的类
【发布时间】:2018-05-08 08:28:34
【问题描述】:

我为一个 gradle 项目从 Eclipse 切换到 IntelliJ。 项目结构如下:

root
├── generated_src [main] (generated sources root)
├── generated_testSrc [tests] (generated test sources root)
├── out
│   └── production
│       ├── classes
│       └── resources
└── src
    └── main
        └── java (sources root)

IntelliJ 基于 gradle 配置创建了 3 个模块,如下所示:

my_project (containing everything, but nothing marked as Sources)
my_project_main (containing generated_src, marked as Sources)
my_project_test (containing generated_testSrc, marked as Tests)

Annotation 处理器用于在 generated_src 文件夹中生成类,生成的类如下所示:

generated_src [main] (generated sources root)
└── path.to.entities
    └── MyEntity_.java
out
└── production
    └── classes
         └── path.to.entities
              └── MyEntity.java

生成的类的所有用法都使用通配符语法导入。但似乎 IntelliJ 认为导入是指 out/production/classes 文件夹中的包,并且未导入生成的类。它让我可以选择导入它并生成:

import path.to.entities.*;
import path.to.entities.MyEntity_; <--WARNING: not used, remove?

导入生成的类后,显示为未使用,因为包已经使用通配符语法导入。如果我删除第二次导入,我会回到未导入 MyEntity_ 的原始状态。

我试过了:

  • 不使用通配符语法导入所有内容。有效但违反团队代码风格
  • my_project_main 标记为模块 my_project 的依赖项,建议 here。问题依然存在

如何正确设置我的项目以正确导入生成的类?

【问题讨论】:

    标签: intellij-idea


    【解决方案1】:

    我已通过更新注释处理器的以下设置解决了该问题

    • 生产源目录:“../generated_src
    • 测试源目录:“../generated_testSrc

    【讨论】: