Java 无法使用AutoValue和IntelliJ解析符号
我一直在尝试为IntelliJ的注释处理找到正确的设置,以便它与Gradle的构建过程共存 每当我从IntelliJ构建时,我都无法让它识别从中生成的源 我对我的项目的要求是:Java 无法使用AutoValue和IntelliJ解析符号,java,intellij-idea,code-generation,auto-value,gradle-apt-plugin,Java,Intellij Idea,Code Generation,Auto Value,Gradle Apt Plugin,我一直在尝试为IntelliJ的注释处理找到正确的设置,以便它与Gradle的构建过程共存 每当我从IntelliJ构建时,我都无法让它识别从中生成的源 我对我的项目的要求是: IntelliJ和Gradle之间的建筑应该是无缝的,并且不会相互干扰 我需要使用IntelliJ的“每个源集创建单独的模块”选项 我需要使用IntelliJ的基于文件夹的结构 IntelliJ需要能够识别和自动完成AutoValue类 以下是通过IntelliJ 2017.2.4和Gradle 3.5再现问题的MC
- IntelliJ和Gradle之间的建筑应该是无缝的,并且不会相互干扰
- 我需要使用IntelliJ的“每个源集创建单独的模块”选项
- 我需要使用IntelliJ的基于文件夹的结构
- IntelliJ需要能够识别和自动完成AutoValue类
- 从IntelliJ创建一个新的Gradle项目
- 选中“为每个源集创建单独的模块”选项
- 打开build.gradle文件:
- 添加以下
块:插件
- 添加以下
块依赖项
- 转到“设置”→ 构建、执行、部署→ 注释处理器
- 选中“启用注释处理”
- 创建一个类:
- 关于IntelliJ运行构建→ 建设项目
- 打开
类,在静态工厂方法上,一切都可以编译,但我得到了错误:GeneratedSourcesTest
无法解析符号“AutoValue\u GeneratedSourcesTest”
如何从IntelliJ访问AutoValue\u GeneratedSourcesTest
类?答案(应该)在gradle apt插件的自述文件中:
也就是说,还要应用net.ltgt.apt idea
插件
顺便说一句,我建议将构建/运行操作委托给IntelliJ中的Gradle。当然它会慢一点,但是需要在IDE中进行零设置,并且工作可靠。也就是说,如果您不这样做,它也应该可以正常工作。在IDEA下导入Gradle项目后,请执行以下步骤:
/generated
添加到项目的.gitignore文件有时,IDEA模块会因为上述原因而丢失其编译器输出路径设置。只需将其设置回默认文件夹即可。只需将build.gradle与这些文件夹一起使用,即可正常工作,无需触摸intellij、源代码集等
plugins {
id 'java'
id "net.ltgt.apt" version "0.20"
}
apply plugin: 'idea'
apply plugin: 'net.ltgt.apt-idea'
group 'abc'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile "com.google.auto.value:auto-value-annotations:1.6.2"
annotationProcessor "com.google.auto.value:auto-value:1.6.2"
}
再见,非常感谢。我认为idea插件迫使我使用基于文件的设置。出于代码格式的原因,我更愿意使用基于文件夹的设置。假设你指的是
.idea/
与*.iws
,那么不,绝对不是。我在Idea中使用了基于文件夹的设置,与Gradle集成(而不是Idea
任务),并将构建/运行操作委托给Gradle。感谢您的澄清和更正。听起来不错。我会回去调查。非常感谢。执行前两个步骤对我很有效。但是,为什么无论您使用哪种IDE,像这样的事情总是让您感到挣扎?哇!谢谢你的详细回答!同样值得一提的是,使用它可以让生活更加轻松:)
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();
}
plugins {
id 'java'
id "net.ltgt.apt" version "0.20"
}
apply plugin: 'idea'
apply plugin: 'net.ltgt.apt-idea'
group 'abc'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile "com.google.auto.value:auto-value-annotations:1.6.2"
annotationProcessor "com.google.auto.value:auto-value:1.6.2"
}