14

我试图让 Intellij 使用 gradle 识别我的属性。我已按照此处的步骤进行操作。所以这意味着我有一个@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.yml当我尝试在or中使用该属性时application.properties,Intellij 说它无法解决它。

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

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

编辑我创建了一个包含两个项目的存储库来演示这一点。一个用于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
4

3 回答 3

6
于 2018-03-16T15:33:01.030 回答
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
}
于 2018-05-22T16:00:44.910 回答
0

这个答案是(此时)其他两个答案的组合,略有不同。就我而言,这就是“解决”问题的原因:(在 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”,它也正是以“spring-configuration-metatdata.json”的形式出现在 annotationProcessor 文件夹中的“附加元数据” " Intellij 在哪里找到它。

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

于 2020-02-05T18:24:38.317 回答