如何让Intellij识别application.yml

时间:2018-02-08 00:07:24

标签: spring-boot gradle intellij-idea properties spring-boot-configuration

我试图让Intellij使用gradle识别我的属性。我已按照here步骤进行操作。所以这意味着我有一个带有一些属性的@ConfigurationProperties带注释的类。

我添加了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.ymlapplication.properties中使用该属性时,Intellij表示它无法解析它。

文档确实说它应该被称为additional-spring-configuration-metadata.json并且可能期望它被调用来处理它,但是我没有看到以这种方式构建构建名称的方法,也没有将Intellij配置为期望的方式。

有没有人让这个与gradle一起工作?或者这是一个错误。

修改我创建了一个带有一对项目的repo来证明这一点。一个用于gradle,一个用于maven。我从start.spring.io创建了项目,基本上只添加了属性配置。我在两种情况下都使用了直接编译依赖,而不是可选的/ compileOnly。

之前我没有证实这一点,但代码辅助确实适用于maven,但不是gradle。两者都在其各自构建文件夹中的spring-configuration-metadata.json中创建META-INF。我不确定谁不接受它。

其他相关版本

Intellij: 2017.3.4
Springboot: 1.5.9
Gradle: 4.4.1
Java: 8.161

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

据我所知,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
}

答案 2 :(得分:0)

此答案是(此时)其他两个答案的组合,但略有不同。就我而言,这是“解决”问题的原因:(在2019.03.01-Ultimate中)

  • 打开默认注释处理(文件>设置>构建,执行,部署>注释处理器>启用注释处理

    • 选择从项目类路径获取处理器
    • 选择“相对于模块输出目录存储生成的源”
    • 保留其他默认值
    • 单击“确定”
  • 在@thyme的答案中将代码添加到build.gradle

    • 用EXCEPT代替into "out/production/classes"
    • 使用:into "build/generated/sources/annotationProcessor"

现在,您应该可以运行gradle clean / build,并且Intellij应该可以找到“其他元数据”定义。

请注意,即使build.gradle代码没有明确提及“ additional-spring-configuration-metadata.json”,但正是“ additional-spring-configuration-metadata.json”在“ annotationProcessor”文件夹中仍以“ spring-configuration-”结尾metatdata.json”,Intellij会找到它。

编辑:还请注意,在添加任何新的“其他元数据”项之后,您需要清理/重建,然后Intellij才能看到新条目(在新生成的文件中)。