@ ConfigurationProperties 在类路径中找不到 Spring 引导配置注释处理器

我尝试在 弹簧靴中完成自定义属性。

我试图通过 IntelliJ IDEA 2016.3创建一个简单的项目:

  1. Spring 启动初始化程序创建了一个新的 Gradle 项目(我还没有检查任何东西)。
  2. 创建了一个新的类 Properties

当我用 @ConfigurationProperties对它进行注释时,下一个通知出现了: notification

文档 说我应该在我的项目中添加以下内容:

dependencies {
optional "org.springframework.boot:spring-boot-configuration-processor"
}


compileJava.dependsOn(processResources)

之后,我尝试重新构建项目并在设置中启用注释处理器,但是通知还没有发出。完成也不起作用(我创建了一个字符串 my)。

130499 次浏览

我忘记加 Propdeps-插件了。然而,我记得即使是在2016.3版本的插件上,它也不适合我,所以就像@CrazyCoder 提到的那样,试着降低 Gradle 的等级或者下载新的2017.1版本(详情)。
当你解决这个问题的时候,你也可能收到 Re-run Spring Boot Configuration Annotation Processor to update generated metadata。为此,点击 Refresh all Gradle projects(在“梯级”侧面菜单中)。

我也遇到过同样的问题,我用了2017.2年的想法和4.1年级, 一些博客说你应该加上:

dependencies {
optional "org.springframework.boot:spring-boot-configuration-processor"
}

但我改成了这样:

dependencies {
compile "org.springframework.boot:spring-boot-configuration-processor"
}

警告消失了。

以下对我有用:

buildscript {
repositories {
jcenter()
maven { url 'https://repo.jenkins-ci.org/public/' }
maven { url 'http://repo.spring.io/plugins-release' }
}
dependencies {
classpath "io.spring.gradle:propdeps-plugin:0.0.9.RELEASE"
}
}


...


apply plugin: 'propdeps'
apply plugin: 'propdeps-eclipse'
apply plugin: 'propdeps-idea'


...


dependencyManagement {
imports {
mavenBom 'org.springframework.boot:spring-boot-starter-parent:2.0.0.RELEASE'
}
}


...


dependencies {
compile "org.springframework.boot:spring-boot-starter"
compile "org.springframework.boot:spring-boot-starter-actuator"
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" // for @ConfigurationProperties, make sure compileJava.dependsOn(processResources)
...
}


compileJava.dependsOn(processResources)

我在 IntelliJ 2018.1.2版本中遇到了同样的问题。我还必须定义 Spring-boot-configuration-處理器的实际版本,以便使其工作:

compile('org.springframework.boot:spring-boot-configuration-processor:2.0.1.RELEASE')

根据 Spring Boot 文档,从4.6级开始的正确配置是

dependencies {
annotationProcessor group: 'org.springframework.boot', name: 'spring-boot-configuration-processor'
// ...
}

IntelliJ IDEA 从构建193.3382(2019.3)开始就支持 annotationProcessor作用域。

在 IntelliJ 的2018.3版本中,我用以下方法解决了这个问题(根据 这份文件) :

对于 Gradle 4.5和更早的版本,依赖项应该在 配置,如下面的示例所示:

dependencies {
compileOnly "org.springframework.boot:spring-boot-configuration-processor"
}

在 Gradle 4.6及更高版本中,依赖关系应该在 AnnotationProcessor 配置,如下面的示例所示:

dependencies {
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
}

在 IDEA 中,这种情况发生在我身上有两个原因:

  1. 仔细检查您的设置是否在 IDEA 中被选中(启用) : 参数设置-> 注释处理器-> 启用注释处理。
  2. 更新你的创意后,检查你的插件并更新它们。如果插件与您的新 IDEA 版本不兼容,那么只需点击更新它们即可。

在 maven project 中,可以帮助添加依赖项 spring-boot-configuration-Processing,并用@EnableConfigurationProperties (AppProperties.class)标记主类。

也许有人能帮忙。

对于 Kotlin 项目来说,Grandle 4.6以后的工作配置是使用注释处理器

apply plugin: "kotlin-kapt"


dependencies {
kapt("org.springframework.boot:spring-boot-configuration-processor:$springBootVersion")
compileOnly("org.springframework.boot:spring-boot-configuration-processor:$springBootVersion")
}

根据 Spring Boot 文档,4.5级和更早的级别的正确配置是

dependencies {
compileOnly group: 'org.springframework.boot', name: 'spring-boot-configuration-processor'
// ...
}

对于那些使用 Maven 或 Gradle 的用户,只需添加对 弹簧-启动-配置-处理机的依赖。

美芬:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

4.5年级及以上

dependencies {
compileOnly "org.springframework.boot:spring-boot-configuration-processor"
}

4.6级及以上

dependencies {
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
}

了解更多信息: “使用注释处理器生成您自己的元数据” Https://docs.spring.io/spring-boot/docs/2.3.1.release/reference/html/appendix-configuration-metadata.html#configuration-metadata-annotation-processor

对于那些使用 maven 的人来说,Intellij 仍然不满意依赖关系的添加。似乎通过 maven-compiler-plugin加入 annotationProcessorPaths最终驯服了野兽。

确保 version与您的弹簧依赖关系相匹配。我怀疑它已经存在于您的有效 POM 中。

原因 : 我使用了一个自定义的父 pom,它在 annotationProcessorPaths中设置了一个 mapstruct 注释处理器,这实际上触发了 IntelliJ 请求手动指定所有其他注释处理器。

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.0.4.RELEASE</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>

必须在主类中提到要使用@ConfigurationProperties 注释的类,如下所示。

@EnableConfigurationProperties(AppProperties.class)

具有@ConfigurationProperties 的 Property Configuration 类如下所示

import org.springframework.boot.context.properties.ConfigurationProperties;




@ConfigurationProperties(prefix = "app")
public class AppProperties {
String name;
String id;
}




主要类是这样的

import com.auth2.demo.config.AppProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;


@SpringBootApplication
@EnableConfigurationProperties(AppProperties.class)
public class DemoApplication {


public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}


}


Spring 的网站有一个教程,其中包含了如何让它工作的很好的解释。只需按照下面“配置属性”部分中的步骤操作即可。

它有一个步骤,这里没有任何其他答案提到: 手动运行 ./gradlew kaptKotlin

截至2021年3月,IDEA 仍将在 Kotlin 属性类顶部显示警告,但属性将被识别和工作。您将能够从 .properties文件导航到 Kotlin 属性类,但是不能反过来。

Https://spring.io/guides/tutorials/spring-boot-kotlin/ 向下滚动到“配置属性”部分。

或者 GitHub 上的同一页:

Https://github.com/spring-guides/tut-spring-boot-kotlin/blob/master/readme.adoc#configuration-properties