TmT*_*ron 17 intellij-idea gradle annotation-processing
tl; dr:我无法配置IntelliJ来生成与gradle相同的目录中的java文件
我有一个使用immutables注释处理器的小项目.它在gradle命令行构建中按预期工作,但我无法让IntelliJ将生成的文件输出到同一目录.
整个项目可在GitLab上获得
Gradle配置:
我使用以下gradle插件:
build-script的相关部分(链接到完整列表):
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"
}
Run Code Online (Sandbox Code Playgroud)
DataEncoding.java
处理源文件,生成的java文件DataEncodingEnabled.java
最终进入/build/generated/source/apt/main
根据预期的方案 com.tmtron.immutables.data
在IntelliJ中,我按照gradle-apt-plugin文档的建议激活注释处理:
然后我执行./gradlew clean
以确保先前的文件已经消失然后我单击Build
- Build Project
在IntelliJ中.
执行注释处理器,但问题是生成的java文件最终位于错误的位置:
它位于:/ build/generated/source/apt/main/build/generated/source/apt/main /com.tmtron.immutables.data
,粗体部分是多余的.
我做错了什么以及如何正确设置,以便IntelliJ和gradle在同一目录中生成文件?
笔记:
TmT*_*ron 13
自Gradle 5.2以来更新2.2019有一个简单的方法 - 请参阅gavenkoa的回答
更新5.2018
我知道最简单的方法是使用apt-idea插件
只需激活build.gradle
文件中的插件:
plugins {
id 'java'
id 'net.ltgt.apt-idea' version "0.15"
}
Run Code Online (Sandbox Code Playgroud)
然后将注释处理器添加到annotationProcessor
配置中:
final DAGGER_VER = '2.16'
dependencies {
implementation "com.google.dagger:dagger:${DAGGER_VER}"
annotationProcessor"com.google.dagger:dagger-compiler:${DAGGER_VER}"
}
Run Code Online (Sandbox Code Playgroud)
GitHub上的测试项目:ex.dagger
(使用IntelliJ 2018.1.4,Gradle 4.7)
ORIG ANSWER
使用parent-dir有一个简单的解决方法,在IntelliJ 2016.3.4中可以正常工作
../main
../test
现在gradle和IntelliJ将生成相同目录的代码.
gav*_*koa 10
现在https://github.com/tbroyer/gradle-apt-plugin指出:
该插件的目标是最终不再需要,已被内置功能取代。随着Gradle 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")
}
Run Code Online (Sandbox Code Playgroud)
compileOnly
如果使用注释,compile
则必须使用Gradle 4.6中annotationProcessor
引入的类。
要启用处理特定的编译任务:
compileJava {
options.annotationProcessorPath = configurations.annotationProcessor
}
Run Code Online (Sandbox Code Playgroud)
禁用:
compileTestJava {
options.compilerArgs += '-proc:none'
}
Run Code Online (Sandbox Code Playgroud)
嘿,每个人我都有同样的问题,并找到了解决此问题的干净方法。我正在使用两个需要批注处理的库(Lombok和MapStruct)。
我的IntelliJ也是2019.1(如果年纪较大,请更新)和Gradle 5.2.1。
首先让我们配置IntelliJ:
最后一步是在Gradle中正确配置依赖项。
现在,您可以从命令行和IDE中执行“生成和运行”。
干杯!
归档时间: |
|
查看次数: |
11554 次 |
最近记录: |