首页 > 解决方案 > IntelliJ IDEA 找不到生成的配置元数据文件

问题描述

在我的项目中,我使用spring-boot-configuration-processor生成配置元数据,这有助于在@ConfigurationProperties.properties 文件中设置标记类中的字段。作为构建系统,我使用 Gradle。

类中带有 JavaDoc 的配置如下所示:

@Configuration
@ConfigurationProperties(prefix = "user-config")
public class UserSettings {
    /**
     * User name.
     */
    private String name;

    // getters & setters
}

spring-boot-configuration-processor像这样在 Gradle 中导入依赖项:

annotationProcessor group: 'org.springframework.boot', name: 'spring-boot-configuration-processor'

问题是 IntelliJ IDEA 在从 Gradle 执行任务时找不到生成的文件spring-configuration-metadata.json,该文件被放入文件夹 /build/classes/java/main/META-INF中。build

我做了一些研究,发现 IDEA 使用 out/production/classes 路径进行生产输出,但 Gradle 使用 build/classes/java/main 路径。

然后我来到了这个 SO 问题,在那里我找到了解决方案:https ://stackoverflow.com/a/55516113/8521177 。正如那里所指出的,有两种解决方案:

  1. 在 IDEA 中手动配置 Spring Boot 注释处理器(这是不可接受的,因为它会强制在我的项目中工作的每个人都这样做)
  2. 将 IDEA 输出路径设置为与此答案中指出的 Gradle 路径相同:https ://stackoverflow.com/a/46420842/8521177 ,因此 IDEA 将找到spring-configuration-metadata.json生成的元数据文件。

另一种是将生成的文件手动放入 src/main/resources/META-INF 并在此文件夹中使用该文件部署应用程序。

第二种解决方案已经制定出来,但是在评论中的相同答案中,我看到了@CrazyCoder 的回复 - Intellij - 将默认输出路径设置为 gradle output,这意味着gradle idea它已经过时,应该在 IDEA 中使用“委托”选项。我打开了这个选项,IDEA 现在在与 Gradle 相同的文件夹中生成输出,但 IDEA 再次找不到生成的元数据文件,因为输出路径再次设置为 out/。

那么,考虑到我不想强迫用户手动执行某些操作,让 IDEA 识别这个生成的文件的正确解决方案是什么?

PS - 另外,我有以下自动添加的源路径:build/sources/annotationProcessor/java/main. 我不知道它是什么以及它来自哪里,该文件夹是空的,但是可以解决它吗?也许我可以让spring boot配置处理器在这个文件夹中生成生成的文件?

UPD:我使用 IntelliJ IDEA 2019.1.3(终极版)、Gradle 5.4.1、Spring Boot 2.1.5。

标签: javaspring-bootgradleintellij-ideaannotation-processing

解决方案


推荐阅读