当前位置: 首页 > 知识库问答 >
问题:

spring配置元数据。json文件不是在IntelliJ Idea for Kotlin@ConfigurationProperties类中生成的

邓鸿信
2023-03-14

我试图为我的基于Spring Boot的项目生成spring-configuration-metadata.json文件。如果我使用Java@ConfigurationProperties类,它会正确自动地生成:

@ConfigurationProperties("myprops")
public class MyProps {

    private String hello;

    public String getHello() {
        return hello;
    }

    public void setHello(String hello) {
        this.hello = hello;
    }
}

但是如果我使用Kotlin类,spring配置元数据。json文件没有生成(我已经尝试过gradle build和Idea Rebuild项目)。

@ConfigurationProperties("myprops")
class MyProps {
    var hello: String? = null
}

AFAIK Kotlin使用构造函数、getter和setter生成同一个类,应该充当常规的Java bean。

你知道为什么spring boot配置处理器不能与Kotlin类一起工作吗?

共有3个答案

羊时铭
2023-03-14

Kotlin有自己的编译器。元数据由注释处理器生成,注释处理器是Java编译器中的一个挂钩点。

我不知道Kotlin中是否有这样的钩子点,但无论如何,Spring Boot目前只支持Java。也许这会有帮助?

姬弘文
2023-03-14

对于那些想使用Maven而不是Gradle的人,需要在kotlin Maven插件配置中添加一个kapt执行。

<execution>
    <id>kapt</id>
    <goals>
        <goal>kapt</goal>
    </goals>
    <configuration>
        <sourceDirs>
            <sourceDir>src/main/kotlin</sourceDir>
        </sourceDirs>
        <annotationProcessorPaths>
            <annotationProcessorPath>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <version>1.5.3.RELEASE</version>
            </annotationProcessorPath>
        </annotationProcessorPaths>
    </configuration>
</execution>

如果将编译器插件(如kotlin-maven-allopen)声明为依赖项,则KT-18022会阻止此操作。

施振海
2023-03-14

谢谢你为我指明了正确的方向。因此,解决方案是添加

dependencies {
    ...
    kapt "org.springframework.boot:spring-boot-configuration-processor"
    optional "org.springframework.boot:spring-boot-configuration-processor"
    ...
}

建造。gradle文件,在命令行中运行gradle compileJava,并在IntelliJ Idea设置构建、执行和部署中打开注释处理-

还要注意的是,如果没有这一行

optional "org.springframework.boot:spring-boot-configuration-processor"

IntelliJ Idea会抱怨什么

无法解析配置属性

应用程序中的消息。属性或应用程序。yml

 类似资料:
  • 我想通过以下方式生成Spring Boot配置元数据: 配置元数据注释处理器设置 在maven中,可以: 但是在gradle中,没有生成: spring boot配置处理器也有同样的问题,maven可以,但gradle不行。 我使用的插件是java或org。喷气式飞机。科特林。jvm,而不是组织。springframework。boot,但我认为这不是问题所在(对于plugin.springfra

  • 我努力实现的目标 < li >从源大JSON文件(employee-sample.json)获取数据 < li >一个简单的spark应用程序,将它作为文本文件读取并存储在parquet(simple-loader.java)中。我不知道JSON文件中有什么,所以我不能放入任何模式,所以我希望读取模式,而不是写入模式。创建了一个parquet文件,其中一列名为“value ”,包含JSON字符串

  • 生成配置缓存optimize:config 可以为应用或者模块生成配置缓存文件 php think optimize:config 默认生成应用的配置缓存文件,调用后会在runtime目录下面生成init.php文件,生成配置缓存文件后,应用目录下面的config.php common.php以及tags.php不会被加载,被runtime/init.php取代。 如果需要生成某个模块的配置缓存,

  • 我试着完成在spring boot的自定义属性。 我试图通过IntelliJ IDEA 2016.3创建一个简单的项目: 使用spring boot初始值设定项创建了一个新的Gradle项目(我根本没有检查任何内容)。 创建了新类。 文档中说我应该在我的项目中添加以下内容: 之后,我尝试重新构建项目并在设置中启用注释处理器,但通知还没有消失。完成也不起作用(我创建了一个字符串)。