@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 такое случается со мной по двум причинам:
- Дважды проверьте, выбран ли ваш параметр (включен) в IDEA: Настройки-> Обработчики аннотаций-> Включить обработку аннотаций.
- После обновления идеи проверьте свои плагины и обновите их. Бывает, что плагины становятся несовместимыми с вашей новой версией 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:
Согласно документации Spring Boot, правильная конфигурация для Gradle 4.5 и более ранних версий:
dependencies {
compileOnly group: 'org.springframework.boot', name: 'spring-boot-configuration-processor'
// ...
}