4

我一直在尝试为IntelliJ的注释处理找到正确的设置,以便它与Gradle的构建过程共存。无法使用AutoValue和IntelliJ解析符号

每当我从IntelliJ构建我无法让它识别从gradle-apt-plugin生成的来源。

我为我的项目的要求是:的IntelliJ和摇篮之间

  • 建筑应该是无缝的,不与对方
  • 我需要使用的IntelliJ的创建单独的模块,每个源设置干扰过程选项
  • 我需要使用基于IntelliJ的文件夹结构
  • IntelliJ需要能够识别和自动完成AutoValue类

这里是为了重现该问题与的IntelliJ 2017年2月4日和摇篮3.5的MCVE步骤:

  • 来自的IntelliJ创建一个新的摇篮项目
  • 检查创建每个单独的模块源集选项
  • 打开构建。gradle这个文件:
  • 添加以下plugins块:

plugins { 
    id 'java' 
    id 'net.ltgt.apt' version '0.12' 
} 
  • 添加以下dependencies

dependencies { 
    compileOnly 'com.google.auto.value:auto-value:1.5' 
    apt 'com.google.auto.value:auto-value:1.5' 
} 
  • 转到设置→建立,执行,部署→标注处理
  • 检查启用标注处理
  • 创建一个类:

@AutoValue 
public abstract class GeneratedSourcesTest { 

    static GeneratedSourcesTest create(String field) { 
     return new AutoValue_GeneratedSourcesTest(field); 
    } 

    public abstract String field(); 
} 
  • 在的IntelliJ运行生成→生成项目
  • 打开GeneratedSourcesTest类的静态工厂方法,一切编译罚款,但我得到的错误:

cannot resolve symbol ‘AutoValue_GeneratedSourcesTest’

我怎样才能让AutoValue_GeneratedSourcesTest可从IntelliJ访问的类?

+0

请参阅https://youtrack.jetbrains.com/issue/IDEA-124090 – CrazyCoder

回答

0

的答案是(应该是)在自述文件gradle这个-的apt-插件:https://github.com/tbroyer/gradle-apt-plugin

即,也适用net.ltgt.apt-idea插件。

顺便说一句,我建议将构建/运行操作委托给IntelliJ中的Gradle。确定它有点慢,但在IDE中需要设置为零并且工作可靠。也就是说,如果你不这样做,它也应该可以工作。

+0

非常感谢。我认为这个插件强制我使用基于文件的设置。我更愿意使用基于文件夹的设置来解决代码格式的问题。 – Jaiye

+0

假设你的意思是'.idea /'与'* .iws',那么不,绝对不是。我在Idea中使用了基于文件夹的设置,通过Gradle集成(**不是** idea任务)以及将构建/运行操作委托给Gradle。 –

+0

感谢您的澄清和纠正。听起来不错。我会回去调查。 – Jaiye

2

下IDEA导入您的摇篮项目后执行以下步骤:

  1. 设置注释处理配置如下: enter image description here

  2. Run菜单:建设 - 建设项目

  3. 右键单击每个新建的生成的文件夹并选择:马克Directory作为 - 生成的源根所以它被标记如下: enter image description here

  4. 添加/generated项目的。gitignore文件

这是一个可行的最低配置这将为生成的类全IDE支持。 缺点是,无论何时重新导入Gradle项目,生成的文件夹将需要再次标记为生成的来源根目录。 也许这可以通过在build.gradle下添加这些路径作为源集来改进。

有时会发生IDEA模块在上述结果中丢失了编译器输出路径设置。只需将其设置回其默认文件夹就足够了。

+0

非常感谢。这非常棒! – Jaiye