@ConfigurationProperties Процессор аннотации конфигурации Spring Boot не найден в classpath

Я пытаюсь сделать завершение для пользовательских свойств в Spring Boot.
Я попытался создать простой проект с помощью IntelliJ IDEA 2016.3:
1. Создал новый проект Gradle с Spring Boot Initializer (я вообще ничего не проверял).
2. Создан новый класс Properties,
3. Когда я аннотировал это @ConfigurationPropertiesпоявилось следующее уведомление: уведомление В документации сказано, что я должен добавить следующее в мой проект:

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

compileJava.dependsOn(processResources)

После этого я попытался перестроить проект и включить процессоры аннотаций в настройках, но уведомление не пошло. Завершение не работает тоже (я создал строку my).

15 ответов

Решение

Я забыл добавить пропдепс-плагин. Однако я помню, что он не работал для меня даже с плагином на 2016.3, поэтому, как упоминалось в @CrazyCoder, попробуйте понизить версию Gradle или загрузить новую версию 2017.1 ( подробнее).
Также вы можете получить Re-run Spring Boot Configuration Annotation Processor to update generated metadata когда вы решите эту проблему. Для этого нажмите Refresh all Gradle projects (в боковом меню Gradle).

У меня такая же проблема. Я использую идею 2017.2 и Gradle 4.1, и некоторые блог сказал, что вы должны добавить:

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

Но я изменил это на это:

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

И предупреждение исчезло.

Согласно документации Spring Boot, правильная конфигурация начиная с Gradle 4.6

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

Но IntelliJ IDEA не поддерживает annotationProcessor сфера (пока). Upvote IDEA-187868, если вы хотите привлечь внимание к этой проблеме.

Для тех, кто использует maven, Intellij все еще не доволен добавлением зависимости. Похоже на добавление annotationProcessorPaths через maven-compiler-plugin наконец приручил зверя.

Убедитесь, что versionсоответствует вашим весенним зависимостям. Я подозреваю, что он уже присутствует в вашем действующем POM.

Причина: я использовал пользовательский parent-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>

Для тех, кто использует 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

В IDEA такое случается со мной по двум причинам:

  1. Дважды проверьте, выбран ли ваш параметр (включен) в IDEA: Настройки-> Обработчики аннотаций-> Включить обработку аннотаций.
  2. После обновления идеи проверьте свои плагины и обновите их. Бывает, что плагины становятся несовместимыми с вашей новой версией IDEA, поэтому просто нажмите, чтобы обновить их.

В проекте maven помогает добавить процессор зависимостей spring-boot-configuration и пометить основной класс с помощью @EnableConfigurationProperties(AppProperties.class).

Может кому поможет.

В версии 2018.3 IntelliJ я решил эту проблему (согласно данной документации) следующим образом:

В Gradle 4.5 и более ранних версиях зависимость должна быть объявлена ​​в конфигурации compileOnly, как показано в следующем примере:

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

В Gradle 4.6 и более поздних версиях зависимость должна быть объявлена ​​в конфигурации annotationProcessor, как показано в следующем примере:

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

Для проектов 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")
}

Вы должны упомянуть в основном классе класс, который хотите использовать аннотацию @ConfigurationProperties, как показано ниже.

@EnableConfigurationProperties(AppProperties.class)

Класс конфигурации свойства с @ConfigurationProperties будет таким

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);
    }

}

У меня была такая же проблема с IntelliJ версии 2018.1.2. Я также должен был определить актуальную версию spring-boot-configuration-processor, чтобы она заработала:

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

Эту ошибку можно устранить, добавив эту аннотацию в ваш mainApplicaitonClass.

      @EnableConfigurationProperties({class name}.class)

Следующие работы для меня:

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)

На веб-сайте Spring есть руководство, которое содержит отличное объяснение, как заставить его работать. Просто следуйте инструкциям в разделе «Свойства конфигурации» ниже.

У него есть один из шагов, о котором здесь не упоминается ни один из других ответов: запустить ./gradlew kaptKotlin вручную.

По состоянию на март 2021 года 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

Согласно документации Spring Boot, правильная конфигурация для Gradle 4.5 и более ранних версий:

dependencies {
    compileOnly group: 'org.springframework.boot', name: 'spring-boot-configuration-processor'
    // ...
}
Другие вопросы по тегам