我有一个 Gradle 多模块项目,它使用 Mapstruct 注释处理器来跨 Java 模块进行数据类型映射。 Gradle 构建工作正常,但当我将项目导入 IntellJ IDEA 2019.3 时,我得到了意外的注释处理器配置。
项目结构如下所示
.
├── build.gradle
├── module1
│ └── src
│ └── main
│ └── java
│ └── io
│ └── wangler
│ └── mapstruct
│ ├── ApplicationModule1.java
│ ├── Person.java
│ ├── PersonDTO.java
│ └── PersonMapper.java
├── module2
│ └── src
│ └── main
│ ├── generated
│ │ └── ch
│ │ └── silviowangler
│ │ └── mapstruct
│ │ └── CarMapperImpl.java
│ └── java
│ └── ch
│ └── silviowangler
│ └── mapstruct
│ ├── ApplicationModule2.java
│ ├── Car.java
│ ├── CarDTO.java
│ └── CarMapper.java
└── settings.gradle
以及为 module1
和 module2
注册注释处理器的 build.gradle
。
subprojects { p ->
apply plugin: 'java-library'
apply plugin: 'groovy'
repositories {
jcenter()
}
dependencies {
annotationProcessor 'org.mapstruct:mapstruct-processor:1.3.1.Final'
implementation 'org.mapstruct:mapstruct:1.3.1.Final'
testImplementation 'org.codehaus.groovy:groovy-all:2.5.8'
testImplementation 'org.spockframework:spock-core:1.3-groovy-2.5'
testImplementation 'junit:junit:4.12'
}
}
当我使用 ./gradlewcompileJava
编译项目时,一切正常,没有出现编译错误。
但是当我使用 IntelliJ 运行重建项目时,我在 module1
中收到编译错误,因为 IntelliJ 没有为 module1
注册注释处理器.
Error:(6, 35) java: cannot find symbol
symbol: class PersonMapperImpl
location: class io.wangler.mapstruct.ApplicationModule1
我在这里做错了什么还是这是一个已知的 IntelliJ 问题?此示例的源代码可以在 https://github.com/saw303/idea-annotation-processors 找到。
最佳答案
我在 IDEA 2019.3 中遇到了同样的问题。看起来像一个错误。 仅当两个模块具有同一组注释处理器时才会发生这种情况。
要解决该问题,您需要使用annotationProcessor指令将任何库添加到模块之一。它不必是真正的注释处理器。这对我有用:
annotationProcessor "commons-io:commons-io:${commonsIoVersion}"
我在 JerBrains bugtracker 中创建了一个缺陷:IDEA-230337
关于java - IntelliJ 2019.3 中 Gradle 多模块构建的注释处理器配置似乎无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59175126/