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

在kotlin/Spring Boots中使用Gradle属性扩展

姚淳
2023-03-14

我目前正在使用gradle作为构建工具构建Kotlin、Spring Boot服务。我正在尝试自动扩展应用程序中的属性。属性文件,使用以下步骤:

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html#howto-自动膨胀梯度

我的版本如下:

- kotlin: 1.1.4-3
- spring boot: 1.5.6.RELEASE
- gradle: 3.5.1

当我运行<代码>时/gradlew bootRun,出现以下错误:

java.lang.IllegalArgumentException: Could not resolve placeholder 'myServiceName' in value "${myServiceName}"

其次是:

java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@510aeb93: startup date [Fri Sep 15 10:59:51 AEST 2017]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@68edf5bb

建筑格拉德尔:

apply plugin: 'kotlin'
apply plugin: 'kotlin-spring'
apply plugin: 'org.springframework.boot'

processResources {
    filesMatching('application.properties') {
        expand(project.properties)
    }
}

格拉德尔。属性:

myServiceName=potato-service

应用属性:

info.app.name=${myServiceName}

这些错误出现在应用程序启动后,并且Spring正在尝试加载属性文件。

有趣的是,如果我更改我试图在应用程序中替换的变量。属性,例如,gradle在processResources阶段失败。

共有1个答案

米楷
2023-03-14

所以,我的身材只有一小部分。gradle,我没有包括在上面,因为我不知道它:

bootRun {
    addResources = true
}

根据Spring Boot文档,将addResources标志设置为true将忽略应用程序。在processResources步骤中创建的属性文件,而使用项目源中的属性文件。这允许您动态更改文件,而无需重新启动应用程序。

对此的正确修复方法(如果在运行bootRun任务时需要变量扩展)是设置:

bootRun {
    addResources = false
}

否则,如果您在构建jar时只需要扩展,那么将此标志保留为true就可以了。

 类似资料:
  • 小结:我正在尝试访问Java中的项目属性(例如版本),我读到的所有地方都说我需要在构建中扩展属性。gradle文件。这很好,但我正在使用LDAP,并在属性文件中配置它。每当我尝试扩展属性时,都会出现LDAP错误49 52e(无效凭据),因此Gradle处理属性的任何操作都会扭曲LDAP属性,使其不再可用。 项目信息:我在下面概述了我认为适用的项目信息。如果需要进一步的细节来确定问题,请发表评论,我

  • 我的插件注册了一个扩展和一些从继承的自定义任务。

  • 我在Gradle使用房地产扩张。除了文件路径之外,所有这些都可以正常工作。 我正在Gradle中使用processResources任务 我的Spring应用程序中有一个属性。属性如下: 在my我定义了以下内容: 结果我进入了应用程序。属性 在我的Spring类中,当执行以下操作时,它会变成D: ProjectsmyProject ectbuild\tmp: 我需要将物业扩展到: 因为这将导致D:

  • 我有一个使用Gradle和Kotlin DSL的Android应用程序。我正在添加Firebase性能监视,但我希望它只对特定的构建类型启用。 我一直遵循Firebase-禁用Firebase性能监视中提供的说明。不幸的是,提供的代码片段是Groovy。 我已尝试通过执行以下操作,在我的应用程序级Gradle脚本中获取对Firebase性能监控扩展的引用: Android Studio没有发现任何

  • 我使用的是 heap.io 和他们的 Android SDK,他们建议您像这样设置他们的库: : 但这是使用gradle groovy sintax,我试图将其与gradle的Kotlin DSL一起使用,如: 但由于某种原因它不起作用,因此: 为什么会发生这种情况?

  • 我想知道是否可以在同伴对象中使用类的属性。例如,以贝娄为例: 我不能通过c1或C2调用changeAge()函数。我可以使用changeAge的唯一地方是通过Person1.changeAge(),当Person1还没有用适当的构造函数实例化时。我想知道这些动作是不是有其他的选择,或者是没有,有同伴对象有什么意义呢