【问题标题】:How to get Intellij to recognize properties in application.yml如何让 Intellij 识别 application.yml 中的属性
【发布时间】:2018-07-18 10:13:51
【问题描述】:

我正在尝试让 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。两者都在各自的构建文件夹中的META-INF 中创建spring-configuration-metadata.json。我不确定谁没有捡起它。

其他相关版本

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

【问题讨论】:

  • 你用的是社区版吗?
  • @AmitPhaltankar nope,使用完整版 Intellij

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


【解决方案1】:

【讨论】:

  • 是的!这些步骤确实使它们出现。不幸的是,我需要使用delegate IDE build/run actions to Gradle,但这让我走上了正轨。如果我委托,并将构建文件夹更改为看起来像上面生成的那样,它就可以工作。所以这听起来像是 Intellij 可以解决的问题。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    • 开启默认注解处理(File>Settings>Build, Execution, Deployment>Annotation Processors>Enable Annotation processing

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

      • 除了 into "out/production/classes" 之外
      • 使用:into "build/generated/sources/annotationProcessor"

    现在您应该能够运行 gradle clean/build 并且 Intellij 应该能够找到您的“附加元数据”定义。

    请注意,即使 build.gradle 代码没有明确提及“additional-spring-configuration-metadata.json”,也正是“附加元数据”最终在 annotationProcessor 文件夹中作为“spring-configuration- metatdata.json”,Intellij 在其中找到它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 2018-06-08
      • 2017-12-14
      • 2011-08-31
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多