java - IntelliJ 2019.3 中 Gradle 多模块构建的注释处理器配置似乎无法正常工作

标签 java gradle intellij-idea

我有一个 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

以及为 module1module2 注册注释处理器的 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

Wrong Annotation processor configuration

我在这里做错了什么还是这是一个已知的 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/

相关文章:

java - 如何稍后在调用 save() 的同一方法中使用 Jpa 存储库 save() 中的结果对象?

java - WebSphere MQ 中的消息组

java - 如何使用 Java 从 URL 链接获取 xsp 值

java - Flash 中的 HTTP POST - 客户端在响应前关闭 TCP 连接

android - 找不到参数的方法 android()

java - 如何在Intellij/Gradle中创建可运行的.jar文件

java - Google 服务 3.3.0 升级错误 - 多个项目变体匹配

intellij-idea - Intellij IDE 中的全局库

intellij-idea - 如何使用键盘快捷键隐藏 Android Studio 中的所有工具栏/窗口和按钮?

java - 如何将静态文件复制到 IntelliJ Idea IDE 中的输出目录以进行 java 构建配置?