如何让 Intellij 识别 application.yml 中的属性
How to get Intellij to recognize properties in application.yml
我正在尝试让 Intellij 使用 gradle 识别我的属性。我已按照步骤 here 进行操作。所以这意味着我有一个带有一些属性的 @ConfigurationProperties
注释 class 。
我添加了 spring 依赖来处理它们:
dependencies {
optional "org.springframework.boot:spring-boot-configuration-processor"
}
compileJava.dependsOn(processResources)
我添加了插件(我试过不使用插件,只是让它成为一个编译依赖,没有改变)
buildscript {
repositories {
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-maven'
apply plugin: 'propdeps-idea'
当我 运行 构建时,我看到一个 build/classes/java/main/META-INF/spring-configuration-metadata.json
文件是根据我的属性创建的。
当我尝试在 application.yml
或 application.properties
中使用 属性 时,Intellij 说它无法解析它。
文档确实说它应该被称为 additional-spring-configuration-metadata.json
并且可能期望它被调用来处理它,但我没有看到一种方法来使构建名称那样,也没有配置 Intellij 来期望否则。
有人用 gradle 解决这个问题吗?或者这是一个错误。
编辑 我用两个项目创建了一个 repo 来演示这一点。一个用于 gradle,一个用于 Maven。我从 start.spring.io 创建了项目,基本上只是添加了属性配置。在这两种情况下,我还使用了直接编译依赖项,而不是可选的/compileOnly。
我之前没有确认过这一点,但是代码辅助确实适用于 maven,但不适用于 gradle。两者都在各自的构建文件夹中的 META-INF
中创建了一个 spring-configuration-metadata.json
。我不太确定谁没有捡起它。
其他相关版本
Intellij: 2017.3.4
Springboot: 1.5.9
Gradle: 4.4.1
Java: 8.161
- Turn the annotation processing on
- 不要delegate IDE build/run actions to Gradle
- 在 IDE 中重建项目:Build -> Rebuild Project
据我所知,IntelliJ(在撰写本文时,2018.1.2)希望 spring-configuration-metadata.json
文件位于主源根目录 (src/main/resources/META-INF/ or src/main/java/META-INF/
) 或它的默认输出目录,供它选择以自动完成源代码树中的属性。要扩展 phospodka 的评论,您可以将类似的内容添加到您的 build.gradle 以满足 IntelliJ。
task copyConfigurationMetadata(type: Copy) {
from(compileJava) {
include 'META-INF/spring-configuration-metadata.json'
}
into "out/production/classes"
}
compileJava {
dependsOn processResources
finalizedBy copyConfigurationMetadata
}
这个答案是(此时)其他两个答案的组合,稍作改动。就我而言,这就是 "fixed" 问题:(2019.03.01-Ultimate)
打开默认注释处理(文件>设置>构建、执行、部署>注释处理器>启用注释处理
- Select 从项目类路径获取处理器
- Select 相对于模块输出目录存储生成的源代码
- 保持其他默认值
- 点击确定
将@thyme 的回答中的代码添加到您的 build.gradle
- EXCEPT 而不是
into "out/production/classes"
- 使用:
into "build/generated/sources/annotationProcessor"
现在您应该能够 运行 gradle clean/build 并且 Intellij 应该能够找到您的 "additional metadata" 定义。
请注意,即使 build.gradle 代码没有明确提及 'additional-spring-configuration-metadata.json',但正是 "additional metadata" 在 annotationProcessor 文件夹中作为 "spring-configuration-metatdata.json" 结束,其中Intellij 找到了。
编辑:另请注意,在 Intellij 看到新条目(在新生成的文件中)之前,您需要在添加任何新的 "additional metadata" 项目后清理/重建。
我正在尝试让 Intellij 使用 gradle 识别我的属性。我已按照步骤 here 进行操作。所以这意味着我有一个带有一些属性的 @ConfigurationProperties
注释 class 。
我添加了 spring 依赖来处理它们:
dependencies {
optional "org.springframework.boot:spring-boot-configuration-processor"
}
compileJava.dependsOn(processResources)
我添加了插件(我试过不使用插件,只是让它成为一个编译依赖,没有改变)
buildscript {
repositories {
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-maven'
apply plugin: 'propdeps-idea'
当我 运行 构建时,我看到一个 build/classes/java/main/META-INF/spring-configuration-metadata.json
文件是根据我的属性创建的。
当我尝试在 application.yml
或 application.properties
中使用 属性 时,Intellij 说它无法解析它。
文档确实说它应该被称为 additional-spring-configuration-metadata.json
并且可能期望它被调用来处理它,但我没有看到一种方法来使构建名称那样,也没有配置 Intellij 来期望否则。
有人用 gradle 解决这个问题吗?或者这是一个错误。
编辑 我用两个项目创建了一个 repo 来演示这一点。一个用于 gradle,一个用于 Maven。我从 start.spring.io 创建了项目,基本上只是添加了属性配置。在这两种情况下,我还使用了直接编译依赖项,而不是可选的/compileOnly。
我之前没有确认过这一点,但是代码辅助确实适用于 maven,但不适用于 gradle。两者都在各自的构建文件夹中的 META-INF
中创建了一个 spring-configuration-metadata.json
。我不太确定谁没有捡起它。
其他相关版本
Intellij: 2017.3.4
Springboot: 1.5.9
Gradle: 4.4.1
Java: 8.161
- Turn the annotation processing on
- 不要delegate IDE build/run actions to Gradle
- 在 IDE 中重建项目:Build -> Rebuild Project
据我所知,IntelliJ(在撰写本文时,2018.1.2)希望 spring-configuration-metadata.json
文件位于主源根目录 (src/main/resources/META-INF/ or src/main/java/META-INF/
) 或它的默认输出目录,供它选择以自动完成源代码树中的属性。要扩展 phospodka 的评论,您可以将类似的内容添加到您的 build.gradle 以满足 IntelliJ。
task copyConfigurationMetadata(type: Copy) {
from(compileJava) {
include 'META-INF/spring-configuration-metadata.json'
}
into "out/production/classes"
}
compileJava {
dependsOn processResources
finalizedBy copyConfigurationMetadata
}
这个答案是(此时)其他两个答案的组合,稍作改动。就我而言,这就是 "fixed" 问题:(2019.03.01-Ultimate)
打开默认注释处理(文件>设置>构建、执行、部署>注释处理器>启用注释处理
- Select 从项目类路径获取处理器
- Select 相对于模块输出目录存储生成的源代码
- 保持其他默认值
- 点击确定
将@thyme 的回答中的代码添加到您的 build.gradle
- EXCEPT 而不是
into "out/production/classes"
- 使用:
into "build/generated/sources/annotationProcessor"
- EXCEPT 而不是
现在您应该能够 运行 gradle clean/build 并且 Intellij 应该能够找到您的 "additional metadata" 定义。
请注意,即使 build.gradle 代码没有明确提及 'additional-spring-configuration-metadata.json',但正是 "additional metadata" 在 annotationProcessor 文件夹中作为 "spring-configuration-metatdata.json" 结束,其中Intellij 找到了。
编辑:另请注意,在 Intellij 看到新条目(在新生成的文件中)之前,您需要在添加任何新的 "additional metadata" 项目后清理/重建。