tl; dr :我无法配置IntelliJ以在与gradle相同的目录中生成java文件
我有一个使用immutables注释处理器的小项目。 它在gradle命令行构建中按预期工作,但我无法让IntelliJ将生成的文件输出到同一目录。
完整项目可在GitLab
上找到 Gradle config :
我使用下面的gradle插件:
构建脚本(link to the full listing)的相关部分:
apply plugin: 'java'
apply plugin: "net.ltgt.apt"
apply plugin: 'idea'
dependencies {
def immutablesVersion = '2.3.9'
compileOnly "org.immutables:value:$immutablesVersion:annotations"
compileOnly "org.immutables:encode:$immutablesVersion"
apt "org.immutables:value:$immutablesVersion"
}
当我开始./gradlew build
时,一切都如预期的那样:
DataEncoding.java
生成的java文件DataEncodingEnabled.java
最终在/build/generated/source/apt/main
下的com.tmtron.immutables.data
在IntelliJ中,我按照gradle-apt-plugin docs的建议激活注释处理:
然后我执行./gradlew clean
以确保先前的文件已经消失,然后我在IntelliJ中点击Build
- Build Project
。
执行注释处理器,但问题是生成的java文件最终位于错误的位置:
位于:/build/generated/source/apt/main/build/generated/source/apt/main/com.tmtron.immutables.data
大胆的部分是多余的。
我做错了什么以及如何正确设置,以便IntelliJ和gradle在同一目录中生成文件?
注意:
答案 0 :(得分:11)
更新2.2019
从Gradle 5.2开始,有一种简单的方法 - 请参阅gavenkoa s answer
更新5.2018
我知道最简单的方法是使用apt-idea plugin
只需激活long TotalWeight = _ctx.ProductsToUsers.Where(pu => pu.UserId == subDetails.user.Id)
.SelectMany(pu => pu.CropData).Sum(cd => Convert.ToInt64(cd.Weight));
文件中的插件:
build.gradle
然后将注释处理器添加到plugins {
id 'java'
id 'net.ltgt.apt-idea' version "0.15"
}
配置:
annotationProcessor
GitHub上的测试项目:ex.dagger
(使用IntelliJ 2018.1.4,Gradle 4.7)
ORIG ANSWER
使用parent-dir有一个简单的解决方法,可以在IntelliJ 2016.3.4中正常工作
final DAGGER_VER = '2.16'
dependencies {
implementation "com.google.dagger:dagger:${DAGGER_VER}"
annotationProcessor"com.google.dagger:dagger-compiler:${DAGGER_VER}"
}
../main
现在gradle和IntelliJ将生成相同目录的代码。
答案 1 :(得分:4)
现在https://github.com/tbroyer/gradle-apt-plugin声明:
此插件的目标是最终不再需要,已被内置功能取代。 5.2版和 IntelliJ IDEA 2019.1 已成为现实。
所以:
dependencies {
compile("com.google.dagger:dagger:2.18")
annotationProcessor("com.google.dagger:dagger-compiler:2.18")
compileOnly("com.google.auto.factory:auto-factory:1.0-beta6")
annotationProcessor("com.google.auto.factory:auto-factory:1.0-beta6")
compileOnly("org.immutables:value-annotations:2.7.1")
annotationProcessor("org.immutables:value:2.7.1")
}
如果使用批注,则 compileOnly
是必需的;如果使用类,则是compile
,是 4.6版中引入的annotationProcessor
。
要启用处理特定的编译任务:
compileJava {
options.annotationProcessorPath = configurations.annotationProcessor
}
要禁用:
compileTestJava {
options.compilerArgs += '-proc:none'
}
答案 2 :(得分:3)
嘿,每个人都有同样的问题,并且找到了解决此问题的干净方法。 我正在使用两个需要批注处理的库(Lombok和MapStruct)。
我的IntelliJ也是2019.1(如果年纪较大,请更新您的版本)和Gradle 5.2.1。
首先让我们配置IntelliJ:
最后一步是在Gradle中正确配置依赖项。
现在,您可以从命令行和IDE中执行Build and Run。
干杯!
答案 3 :(得分:0)