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


75

我尝试在Spring Boot中完成自定义属性。

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

  1. 使用Spring Boot Initializer创建了一个新的Gradle项目(我什么都没检查过)。
  2. 创建了一个新类Properties

当我用注释时@ConfigurationProperties,出现了下一个通知: 通知

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

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

compileJava.dependsOn(processResources)

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


2
您使用什么Gradle版本?请问这个答案的帮助?
CrazyCoder

1
现在它可以工作了,但是我忘了添加propdeps-plugin,所以我不能确定新版本的IDE是否可以解决。无论如何,我赞成你的回答。
Feeco

Answers:


47

我有同样的问题。我使用想法2017.2和gradle 4.1,并且一些博客说您应该添加:

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

但是我将其更改为:

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

警告不见了。


这个问题使我困扰了几个月。我尝试了其余的答案,但没有任何效果。这以某种方式起作用。在Gradle 5.2.1和IDEA 2018.3.5上运行
k9yosh

@ k9yosh for Gradle 5.2.1更喜欢另一个答案
naXa

24

根据Spring Boot docs,自Gradle 4.6起的正确配置是

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

annotationProcessor自内部版本193.3382(2019.3)起,IntelliJ IDEA支持范围。不要忘记在IntelliJ IDEA设置中启用注释处理


11

我发生这种情况的原因有两个:

  1. 仔细检查是否在IDEA中选择(启用)设置:“首选项”->“注释处理器”->“启用注释处理”。
  2. 更新您的Idea之后,请检查您的插件并进行更新。碰巧插件与您的新IDEA版本不兼容,因此只需单击以更新它们。

6
在我的IDEA中,(1)是:File | 设置| 构建,执行,部署| 编译器 注释处理器
quangkid

10

我忘了添加propdeps-plugin。但是,我记得即使使用2016.3上的插件它也对我不起作用,因此正如@CrazyCoder所述,请尝试降级Gradle或下载新的2017.1版本(详细信息)。当您解决此问题时,
也可能会收到Re-run Spring Boot Configuration Annotation Processor to update generated metadata。为此,请单击Refresh all Gradle projects(在Gradle侧面菜单中)。


2
仍然不能为我工作。我加了propdeps-plugin,该optional线compileJava.dependsOn(processResources),得到了IntelliJ IDEA的2017.3。尝试clean在Gradle中运行任务,然后Refresh allBuild,仍然没有执行任何操作。任何想法?
Lamberto Basti


5

在IntelliJ的2018.3版本中,我通过以下方式解决了此问题(根据本文档):

对于Gradle 4.5和更早版本,依赖关系应在compileOnly配置中声明,如以下示例所示:

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

在Gradle 4.6及更高版本中,依赖性应在注释处理器配置中声明,如以下示例所示:

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

5

对于Kotlin项目,Gradle 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")
}

感谢您的评论,我也设法生成了元文件,但是不幸的是IntelliJ并没有选择它。我在jetbrains bugtracker中发现了一个相关问题。您设法使其正常工作了吗?
马库斯举行了

2

IntelliJ 2018.1.2版存在相同的问题。为了使它工作,我还必须定义spring-boot-configuration-processor的实际版本:

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

4
对我来说是compileOnly "org.springframework.boot:spring-boot-configuration-processor:$springVersion"
kshep92 '18

2

对于那些使用Maven或Gradle的用户,只需添加对spring-boot-configuration-processor的依赖。

Maven:

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

Gradle 4.5及更早版本

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

Gradle 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元数据注释处理器


2

您必须在主类中提及您要使用@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);
    }

}


2

对于那些正在使用maven的人,Intellij仍然不满意添加依赖项。似乎像annotationProcessorPaths通过添加maven-compiler-plugin最后驯服了野兽。

确保version匹配您的spring依赖项。我怀疑它已经存在于您的有效POM中。

原因:我使用的是一个自定义的父pom,它具有一个内置的mapstruct注释处理器,annotationProcessorPaths并且实际上触发了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>

显然,mapstruct要求我们在中特别提及mapstruct annotationProcessorPaths,当我们开始手动指定它们时,还必须手动添加spring-boot-configuration-processor,lombok等。至少这是intellij想要的
-anandbibek

0

以下对我有用的作品:

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)

0

根据Spring Boot docs,Gradle 4.5及更早版本的正确配置是

dependencies {
    compileOnly group: 'org.springframework.boot', name: 'spring-boot-configuration-processor'
    // ...
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.